golang简单易部署的OCR API服务器插件库ocrserver的使用

Golang简单易部署的OCR API服务器插件库ocrserver的使用

ocrserver是一个简单的OCR服务器,作为gosseract的工作示例。

快速开始

使用预构建的Docker镜像

# 运行Docker容器
% docker run -p 8080:8080 otiai10/ocrserver
# 打开 http://localhost:8080

使用Docker Compose开发

# 启动服务
% docker-compose up
# 打开 http://localhost:8080

如果需要更多语言支持:

# 构建包含俄语支持的镜像
% docker-compose build --build-arg LOAD_LANG=rus
% docker-compose up

手动安装

如果你已经安装了tesseract-ocr和相关库文件:

# 获取ocrserver
% go get github.com/otiai10/ocrserver/...
# 启动服务
% PORT=8080 ocrserver
# 打开 http://localhost:8080

部署到Heroku

# 获取代码
% git clone git@github.com:otiai10/ocrserver.git
% cd ocrserver
# 创建应用
% heroku login
% heroku create
# 部署容器
% heroku container:login
% heroku container:push web
# 打开应用
% heroku open

完整示例代码

下面是一个使用ocrserver的完整示例:

package main

import (
	"fmt"
	"io/ioutil"
	"net/http"
	"bytes"
)

func main() {
	// 1. 启动ocrserver服务(通过上述任一方法)
	// 假设服务运行在 http://localhost:8080

	// 2. 准备要识别的图片
	imageBytes, err := ioutil.ReadFile("example.png")
	if err != nil {
		panic(err)
	}

	// 3. 创建HTTP请求
	req, err := http.NewRequest("POST", "http://localhost:8080/base64", bytes.NewBuffer(imageBytes))
	if err != nil {
		panic(err)
	}
	req.Header.Set("Content-Type", "application/octet-stream")

	// 4. 发送请求
	client := &http.Client{}
	resp, err := client.Do(req)
	if err != nil {
		panic(err)
	}
	defer resp.Body.Close()

	// 5. 读取响应
	body, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		panic(err)
	}

	// 6. 输出识别结果
	fmt.Println("OCR识别结果:")
	fmt.Println(string(body))
}

API端点

ocrserver提供以下API端点:

  • POST /base64 - 接受Base64编码的图像
  • POST /file - 接受multipart/form-data文件上传
  • GET / - 返回简单的HTML上传表单

这个库非常适合需要快速搭建OCR服务的场景,部署简单,使用方便。


更多关于golang简单易部署的OCR API服务器插件库ocrserver的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于golang简单易部署的OCR API服务器插件库ocrserver的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


Golang OCR API服务器插件库ocrserver使用指南

ocrserver是一个简单易部署的Golang OCR(光学字符识别)API服务器,基于Tesseract OCR引擎,提供RESTful API接口。下面我将详细介绍如何使用这个库。

安装与部署

1. 安装依赖

首先需要安装Tesseract OCR引擎:

# Ubuntu/Debian
sudo apt install tesseract-ocr

# macOS
brew install tesseract

# Windows
# 下载安装包:https://github.com/UB-Mannheim/tesseract/wiki

2. 安装ocrserver

go get -u github.com/otiai10/ocrserver

基本使用

1. 启动服务器

最简单的启动方式:

ocrserver

默认监听8080端口,可以通过-p参数指定端口:

ocrserver -p 8888

2. 通过代码启动

package main

import (
	"github.com/otiai10/ocrserver"
)

func main() {
	server := ocrserver.New()
	server.Port = 8888
	server.Run()
}

API接口

ocrserver提供了简单的RESTful API:

1. 上传图片识别

POST /api/ocr
Content-Type: multipart/form-data

参数:
- file: 图片文件
- lang: 可选,语言代码(如eng, chi_sim等)

示例curl请求:

curl -X POST -F "file=@test.png" http://localhost:8080/api/ocr

2. 通过URL识别

POST /api/ocr/url
Content-Type: application/json

参数:
{
  "url": "图片URL",
  "lang": "可选,语言代码"
}

示例curl请求:

curl -X POST -H "Content-Type: application/json" -d '{"url":"https://example.com/test.png"}' http://localhost:8080/api/ocr/url

高级配置

1. 自定义Tesseract路径

如果Tesseract不在系统PATH中,可以指定路径:

server := ocrserver.New()
server.TesseractPrefix = "/path/to/tesseract"

2. 启用调试模式

server.Debug = true

3. 设置超时时间

server.Timeout = 30 * time.Second

完整示例代码

package main

import (
	"log"
	"time"
	
	"github.com/otiai10/ocrserver"
)

func main() {
	server := ocrserver.New()
	
	// 配置参数
	server.Port = 8888
	server.Timeout = 30 * time.Second
	server.Debug = true
	server.TesseractPrefix = "/usr/local/bin/tesseract"
	
	// 自定义路由
	server.Router.GET("/health", func(c *gin.Context) {
		c.JSON(200, gin.H{"status": "ok"})
	})
	
	// 启动服务器
	log.Printf("Starting OCR server on :%d", server.Port)
	if err := server.Run(); err != nil {
		log.Fatal(err)
	}
}

客户端调用示例

Go客户端示例

package main

import (
	"bytes"
	"fmt"
	"io"
	"mime/multipart"
	"net/http"
	"os"
)

func main() {
	// 准备请求体
	body := &bytes.Buffer{}
	writer := multipart.NewWriter(body)
	
	// 添加文件
	file, err := os.Open("test.png")
	if err != nil {
		panic(err)
	}
	defer file.Close()
	
	part, err := writer.CreateFormFile("file", "test.png")
	if err != nil {
		panic(err)
	}
	_, err = io.Copy(part, file)
	if err != nil {
		panic(err)
	}
	
	// 添加语言参数(可选)
	_ = writer.WriteField("lang", "eng")
	
	// 关闭writer
	err = writer.Close()
	if err != nil {
		panic(err)
	}
	
	// 发送请求
	req, err := http.NewRequest("POST", "http://localhost:8888/api/ocr", body)
	if err != nil {
		panic(err)
	}
	req.Header.Set("Content-Type", writer.FormDataContentType())
	
	client := &http.Client{}
	resp, err := client.Do(req)
	if err != nil {
		panic(err)
	}
	defer resp.Body.Close()
	
	// 读取响应
	respBody, err := io.ReadAll(resp.Body)
	if err != nil {
		panic(err)
	}
	
	fmt.Println(string(respBody))
}

性能优化建议

  1. 语言包优化:只安装需要的语言包,减少内存占用
  2. 并发控制:在高并发场景下,限制同时处理的OCR请求数量
  3. 缓存结果:对相同图片的识别结果进行缓存
  4. 预处理图片:在客户端对图片进行适当的裁剪和增强

ocrserver是一个轻量级的OCR解决方案,适合快速部署和集成到现有系统中。对于更复杂的OCR需求,可能需要考虑商业OCR服务或更专业的OCR引擎。

回到顶部