(摘) Golang在Linux下实现实现图片中文识别

声明:内容源自网络,版权归原作者所有。若有侵权请在网页聊天中联系我

因为微信网页协议最近老是出现问题(半夜三更强制退出),导致付费文章判断不到。考虑通过图片文字识别来解决,可以不需要微信在PC上登陆,改为占用一台物理手机。准备用一台淘汰手机来完成此工作。

这里的方案是离开OCR,使用Tesseract。感觉上识别率可用。

安装

sudo apt install tesseract-ocr
sudo apt install libtesseract-dev
sudo apt install tesseract-ocr-chi-sim

//可以查看包含的语言包
tesseract --list-langs

go get github.com/otiai10/gosseract

go代码

package main

import (
    "fmt"
    "github.com/otiai10/gosseract"
)

func main() {
    client := gosseract.NewClient()
    defer client.Close()
    client.SetImage("/mnt/h/2.jpg")
    client.SetLanguage("chi_sim")
    text, _ := client.Text()
    fmt.Println(text)
}

这里讲了关于tesseract-ocr的安装

https://github.com/jaytaylor/tesseract-web 此库换了个思路,将其作为一个OCR服务,可以供其它来调用,解决不方便安装程序的场景。


在树莓派上安装出错,需要另外添加一个: sudo apt install libleptonica-dev

经测试,在PC笔记本上识别率较高(150Kb的png2秒左右),使用完全没问题。降低画面质量也达到较高识别。

在树莓派3上的识别速度较慢(150Kb左右的png半分钟左右),png原图识别率可用。

所以,如果在树莓派上使用,更合理的是使用在线OCR。


在线OCR可以考虑一下 https://github.com/shiguanghuxian/txai ,基于腾讯,看起来还比较全,可以识别其它。

https://github.com/deloz/baiduocrhttps://github.com/A1311981684/BaiduOCR 是基于百度在线OCR,时间有点久了,但方法差不多。


那么思路就是这样了: 手机保持常亮,获取某个区域图片进行识别。当识别到付费时,发送已付费标识给服务端,引导开放全文可读。

可能存在的问题: 刷新速度与多人付费时的问题。


https://github.com/deloz/baiduocr 出现错误,使用https://github.com/A1311981684/BaiduOCR也是出错,不过小修改即可使用了。

package main

import (
	"flag"
	"log"

	"github.com/A1311981684/BaiduOCR/ocr"
)

/*   Set you API key and secret Key in token/token.go   */

func main() {
	var file string
	flag.StringVar(&file, "f", "screen.jpg", "识别的图片")
	flag.Parse()

	res, err := ocr.OCR(file)
	if err != nil {
		panic(err)
	}

	for _, v := range res {
		for k1, v1 := range v {
			if k1 == "words" {
				log.Printf("%s"+"\r\n", v1)
			}
		}
	}
}

在树莓派3上,压缩的jpg和png等都能较好的识别,速度也较快(从运行,上传到回传,耗时2秒左右),识别率也是很高的。

余下的问题就是如何快速的截图,并上传到服务器进行识别。

这里本地需要完成一个较为粗糙的“改变”比较,减少上传量。再说百度的调用量也是有限制的(QPS=2,通用文字识别(高精度版)500次/天免费,通用文字识别(标准版) 50000次/天免费。这个库使用了高精度版)

还是节约一点,试过了修改为普通精度也是完全没问题的(至少手机的截图还是比较好识别的,即使我压缩为jpg)

在库中的ocr/ocr.go修改

//百度高精度OCR接口URL
//Baidu high accuracy OCR API url
//const ocrURL = "https://aip.baidubce.com/rest/2.0/ocr/v1/accurate_basic?access_token="
//百度普通精度OCR接口URL
const ocrURL = "https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic?access_token="

相关文章