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))
}
性能优化建议
- 语言包优化:只安装需要的语言包,减少内存占用
- 并发控制:在高并发场景下,限制同时处理的OCR请求数量
- 缓存结果:对相同图片的识别结果进行缓存
- 预处理图片:在客户端对图片进行适当的裁剪和增强
ocrserver是一个轻量级的OCR解决方案,适合快速部署和集成到现有系统中。对于更复杂的OCR需求,可能需要考虑商业OCR服务或更专业的OCR引擎。