毫秒识别、开源免费的OCR离线部署方案

 

1.准备工作

1.1 软件和开发工具版本

pycharm2019.3.5及以上版本

安装python3.6及以上版本

PaddleOCR-2.6.0

1.2安装依赖

pip install -r requirements.txt

1.3安装paddle

python -m pip install paddlepaddle==2.5.1 -i https://pypi.tuna.tsinghua.edu.cn/simple

2.使用测试

准备一张图片,这张图片已经很模糊了,字体倾斜,识别准确率还是挺高的。而且识别耗时不超过1秒

14745624156240eebea05ac74e144d38.png

b1757af4d8ce4f59a95cb27dc88f9646.jpeg

    img_path = "test/aaa.png"

    print("开始")
    start_time = datetime.datetime.now()
    result = engine.ocr(img_path, det=args.det, rec=args.rec, cls=args.use_angle_cls)

    if result is not None:
        for line in result:
            paddleocr.logger.info(line)
    end_time = datetime.datetime.now()
    total_time = end_time - start_time
    print("程序运行总耗时:" + str(total_time))

    logging.info("程序运行总耗时:" + str(total_time))

 

识别效果

ed87c15f6d77479db7f64504fd3dd7dc.png

 

3.开发web api服务为其他模块调用提供API接口

@app.route('/ocr/general_basic', methods=['POST'])
def api():
    timeout = 5
    # 来捕捉客户端传来的数据
    data = request.get_data().decode('utf-8')
    # json.loads将string转换为dict
    data = json.loads(data)
    # 获取dict中'img'标签的数据
    image_b64 = data["img"]
    # 进行base64解码工作 base64->数组
    image_decode = base64.b64decode(image_b64)
    # fromstring实现了字符串到Ascii码的转换
    nparr = np.fromstring(image_decode, np.uint8)
    # 从nparr中读取数据,并把数据转换(解码)成图像格式
    img_np = cv2.imdecode(nparr, cv2.IMREAD_COLOR)

    now = datetime.datetime.now()
    formatted_date = now.strftime("%Y-%m-%d")
    timestamp_uuid = uuid.uuid1()
    image_path = "{0}/{1}".format(root_image_path, formatted_date)
    if(os.path.exists(image_path) == False):
        os.mkdir(image_path)
    file = os.path.join(image_path, str(timestamp_uuid) + ".jpg")
    cv2.imwrite(file, img_np)

    print("开始")
    start_time = datetime.datetime.now()
    result = engine.ocr(file, cls=args.use_angle_cls)

    content = {}
    if result is not None:
        i = 0
        for line in result:
            content[i] = line[1][0]
            i = i + 1
    print(content)
    end_time = datetime.datetime.now()
    total_time = end_time - start_time
    print("程序运行总耗时:" + str(total_time))
    logger.info("耗时:{0}, 内容:{1}", str(total_time), content)

    data = {
        "total_time": str(total_time),
        "content": content
    }

    response = make_response(json.dumps(data))
    response.headers["Content-Type"] = "application/json;charset=UTF-8"
    return response


if __name__ == '__main__':
    server = make_server('0.0.0.0', 5000, app)
    print('Serving HTTP on port 5000...')
    server.serve_forever()

4.其他模块调用(Java)

try {
	//转换为base64
	byte[] bytes = IOUtils.toByteArray(stream);
	String encoded = Base64.getEncoder().encodeToString(bytes);
	Map<String, String> req = new HashMap<>();
	req.put("img", encoded);
	RestTemplate restTemplate = new RestTemplate();
	ResponseEntity<Map> responseEntity = restTemplate.postForEntity(paddleUrl, req, Map.class);
	HashMap<String, String> content = (HashMap) responseEntity.getBody().get("content");

	int i = 0;
	for (Map.Entry<String, String> entry : content.entrySet()) {
		parseContent += entry.getValue();
		if (i < content.size() - 1) {
			parseContent += "\n";
		}
		i++;
	}
} catch (IOException ex) {
	log.error("异常" + ex.toString());
	ex.printStackTrace();
}

完整代码https://download.csdn.net/download/shangjg03/88165764

 

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
BMapGL是百度地图JavaScript API 4.0版本中的一个模块,用于渲染地图。离线地图是指在没有网络连接的情况下,使用本地下载的地图数据进行地图展示。BMapGL同样支持离线地图的使用。 以下是离线地图的使用步骤: 1. 下载离线地图数据:通过百度地图官网提供的离线地图下载工具,选择需要下载的地图区域,并下载对应的离线地图数据。下载完成后,将数据保存到本地磁盘上。 2. 将离线地图数据添加到地图:在初始化地图时,通过BMapGL.MapOptions对象的offline属性,将离线地图数据添加到地图中。代码示例: ``` var map = new BMapGL.Map("container", { minZoom: 3, maxZoom: 19, offline: { retryInterval: 5000, txt: "离线地图已开启", imgUrl: "offline.png", jsonUrl: "离线地图数据文件路径" } }); ``` 其中,retryInterval表示离线地图数据加载失败后的重试时间间隔(单位:毫秒);txt表示离线地图开启时,在地图上的提示文本;imgUrl表示离线地图开启时,在地图上显示的图片路径;jsonUrl表示离线地图数据文件的路径(即下载的离线地图数据所在的文件夹路径)。 3. 离线地图数据的使用:当离线地图数据添加到地图中后,地图将在没有网络连接时,使用本地下载的离线地图数据进行地图展示。此时,在地图上进行缩放、拖动等操作,地图将立即响应。 需要注意的是,在使用离线地图时,需要将下载的离线地图数据文件夹放置在正确的位置,并设置正确的路径。同时,为了保证地图的流畅性,建议下载的离线地图数据区域尽量小,并且只下载需要使用的区域。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

shangjg3

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值