OpenOCR makes it simple to host your own OCR REST API.
The heavy lifting OCR work is handled by Tesseract OCR.
Docker is used to containerize the various components of the service.
OpenOCR can easily run on any PAAS that supports Docker containers. Here are the instructions for a few that have already been tested:
If your preferred PAAS isn't listed, please open a Github issue to request instructions.
OpenOCR can be launched on anything that supports Docker, such as Ubuntu 14.04.
Here's how to install it from scratch and verify that it's working correctly.
See Installing Docker on Ubuntu instructions.
$ ifconfig
eth0 Link encap:Ethernet HWaddr 08:00:27:43:40:c7
inet addr:10.0.2.15 Bcast:10.0.2.255 Mask:255.255.255.0
...
The ip address 10.0.2.15
will be used as the RABBITMQ_HOST
env variable below.
git clone https://github.com/tleyden/open-ocr.git
cd open-ocr/docker-compose
./run.sh
(in case you don't have execute right type sudo chmod +x run.sh
You can use the docker-compose without the run.sh. For this just do:
# for v1
export OPEN_OCR_INSTANCE=open-ocr
# for v2
export OPEN_OCR_INSTANCE=open-ocr-2
# then up (with -d to start it as deamon)
docker-compose up
Docker Compose will start four docker instances
You are now ready to decode images → text via your REST API.
cd docker-compose directory
docker-machine start default
docker-machine env
docker-compose up -d
to run containers as daemons or docker-compose up
to see the log in consoleWhere IP_ADDRESS_OF_DOCKER_HOST
is what you saw when you run docker-machine env
(e.g. 192.168.99.100)
and where HTTP_POST
is the port number inside the .yml
file inside the docker-compose directory presuming it should be the same 9292.
Request
$ curl -X POST -H "Content-Type: application/json" -d '{"img_url":"http://bit.ly/ocrimage","engine":"tesseract"}' http://IP_ADDRESS_OF_DOCKER_HOST:HTTP_PORT/ocr
Assuming the values are (192.168.99.100 and 9292 respectively)
$ curl -X POST -H "Content-Type: application/json" -d '{"img_url":"http://bit.ly/ocrimage","engine":"tesseract"}' http://192.168.99.100:9292/ocr
Response
It will return the decoded text for the test image:
< HTTP/1.1 200 OK
< Date: Tue, 13 May 2014 16:18:50 GMT
< Content-Length: 283
< Content-Type: text/plain; charset=utf-8
<
You can create local variables for the pipelines within the template by
prefixing the variable name with a “$" sign. Variable names have to be
composed of alphanumeric characters and the underscore. In the example
below I have used a few variations that work for variable names.
Request
$ curl -X POST -H "Content-Type: application/json" -d '{"img_url":"http://bit.ly/ocrimage","engine":"tesseract"}' http://10.0.2.15:$HTTP_PORT/ocr
Response
It will return the decoded text for the test image:
< HTTP/1.1 200 OK
< Date: Tue, 13 May 2014 16:18:50 GMT
< Content-Length: 283
< Content-Type: text/plain; charset=utf-8
<
You can create local variables for the pipelines within the template by
prefixing the variable name with a “$" sign. Variable names have to be
composed of alphanumeric characters and the underscore. In the example
below I have used a few variations that work for variable names.
Request
$ curl -X POST -H "Content-Type: application/json" -d '{"img_base64":"<YOUR BASE 64 HERE>","engine":"tesseract"}' http://10.0.2.15:$HTTP_PORT/ocr
multipart/related
, rather than passing an image URL. (example client code provided in the Go REST client)See the REST API docs and the Go REST client for details.
These client libraries make it easier to invoke the REST API:
The supplied docs/upload-local-file.sh
provides an example of how to upload a local file using curl with multipart/related
encoding of the json and image data:
docs/upload-local-file.sh <urlendpoint> <file> [mimetype]
wget http://bit.ly/ocrimage
docs/upload-local-file.sh http://10.0.2.15:$HTTP_PORT/ocr-file-upload ocrimage
OpenOCR is Open Source and available under the Apache 2 License.