This app uses OCR to remove text from an image. You might use this as a stand-alone microservice, or as a pre-processing step in a computer vision pipeline. This tutorial is an adaptation of this post.

Define the environment

You’ll start by creating a Beam app definition. In this file, you’re defining a few things:

  • The libraries you want installed in the environment
  • The compute settings (some of the CV operations are heavy, so 16Gi of memory is a safe choice)
from beam import App, Runtime, Image, Output

app = App(
            commands=["apt-get update && apt-get install -y libgl1"],

Removing the text from an image

You’ll use the code below to accomplish the following:

  • Identify text in the base-64 encoded image and create bounding boxes around each block of text
  • Add a mask around each box of text
  • Paint over each text-mask to remove the text

We’ve added an decorator to remove_text. This decorator will allow us to run this code on Beam, instead of your laptop.

You can run this code on Beam by running beam run:

beam run

Make sure to include a sample image in your working directory, and update the script with the path. In this example, I’m using this image as a sample:


If you’re satisfied with this function and want to deploy it as an API, you can do so by updating the decorator:

Just replace with @app.task_queue()

# This function will be exposed as a web API when deployed!
  def remove_text(**inputs):

You can deploy this app by running:

beam deploy

You’ll call the API by copying the task queue URL from the dashboard.

Since this task runs asynchronously, you’ll use the /v1/task/{task_id}/status/ API to retrieve the task status and a link to download the image output.

This will return a response, which contains:

  • Task ID
  • The start and end time
  • A dictionary with pre-signed URLs to download the outputs
  "task_id": "edbcf7ff-e8ce-4199-8661-8e15ed880481",
  "started_at": "2023-04-24T22:44:06.911920Z",
  "ended_at": "2023-04-24T22:44:07.184763Z",
  "outputs": {
    "my-output-1": {
      "path": "output_path",
      "name": "my-output-1",
      "url": ""
  "status": "COMPLETE",

Enter the outputs url in your browser to download the image. You’ll see that the text has been removed: