基于百度的paddle实现的图片识别文字(linux部署)

基于百度的paddle实现的图片识别文字,参考以下文章整理出linux环境下的paddle部署

PaddleOCR在windows中的使用_from paddle.fluid.layers import rnncell, lstmcell,-CSDN博客

一、下载PaddleOCR

可以先在window中下载,在github或者gitee上面可以下载相关的解压包,下载地址:PaddleOCR下载
下载好后解压PaddleOCR,看到一个deploy目录,进去

deploy下有部署文档说明

进入ocr_system

打开params.py查看

下载模型,下载地址:模型下载

下载好之后,在对应的PaddleOCR解压缩包的目录下新建inference文件夹,如下图所示,并将下载好的模型,放到这里,然后解压缩

打开检查params.py路径是否一致

打开config.json文件,改成false后保存,安装的是CPU版的PaddlePaddle所以这里的true需要改成false

完成之后放入Linux下

二、安装python环境

使用paddlepaddle需要先安装python环境,可以通过anaconda一键安装python环境
anaconda下载地址:Index of /anaconda/archive/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror

开始anaconda安装python环境

sh Anaconda3-2021.11-Linux-x86_64.sh

按照安装提示安装,遇到查看许可时可输入q来退出


继续直到完成安装

手动将conda加入环境变量

vim ~/.bashrc

在第一行输入:

export PATH="root/anaconda3/bin:$PATH"

刷新环境变量

source ~/.bash_profile

验证是否能识别conda命令

conda info --envs


显示当前有base环境,则conda已加入环境变量

二、创建conda环境

创建paddle_env的运行环境

conda create --name paddle_env python=3.8 --channel

Index of /anaconda/pkgs/free/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror

等待安装完成,系统会创建1个名为paddle_env、python版本为3.8的可执行环境

激活刚创建的paddle_env环境

conda activate paddle_env

   

  • 安装paddlehub及其依赖库

安装paddle

# 默认安装CPU版本

​pip install paddlepaddle -i https://mirror.baidu.com/pypi/simple

安装完paddle后在PaddleOCR路径下通过命令进行相关模块的安装

pip install -r requirements.txt -i https://mirror.baidu.com/pypi/simple

当出现Successfully installed …就说明安装成功了

安装Hub Serving

​pip install paddlehub -i https://mirror.baidu.com/pypi/simple

   

不要关闭窗口,也不要对窗口进行任何操作,直到出现,出现Successfully installed。。。这个说明安装成功

配置好了之后,进入对应的虚拟环境,然后输入hub出现下图所示的内容

   

安装服务模块

# 安装检测服务模块:  

hub install deploy/hubserving/ocr_det/

# 安装分类服务模块:  

hub install deploy/hubserving/ocr_cls/

#安装识别服务模块:  

hub install deploy/hubserving/ocr_rec/

# 安装检测+识别串联服务模块:  

hub install deploy/hubserving/ocr_system/

四、启动服务

#配置文件启动

hub serving start -c deploy/hubserving/ocr_system/config.json

#后台启动

hub serving start -m ocr_system -p 8866 --use_multiprocess --workers=3 &

–use_multiprocess 代表启动多线程
–workers 代表线程数 一般为2*cpu-1

#关闭服务

hub serving stop -p 8866

访问接口:http://ip:端口/predict/ocr_system

 测试服务是否启动成功

官方给出了两种模式,一是命令行执行,一是代码执行

命令:在/home/user/images目录下放入一张命名为test.png的图片,进入PaddleOCR-release-2.7/tools目录下执行命令:

python test_hubserving.py --server_url=http://127.0.0.1:8866/predict/ocr_system --image_dir=/home/user/images/test.png

代码:新建文件test.py,写入代码,注意代码中的地址要与图片存放地址一致

import requests
import json
import cv2
import base64

def cv2_to_base64(image):
    data = cv2.imencode('.png', image)[1]
    return base64.b64encode(data.tobytes()).decode('utf8')

# 发送HTTP请求
data = {'images':[cv2_to_base64(cv2.imread("./test.png"))]}
headers = {"Content-type": "application/json"}
url = "http://127.0.0.1:8866/predict/ocr_system"
r = requests.post(url=url, headers=headers, data=json.dumps(data))

# 打印预测结果
print(r.json()["results"])

在test.py目录下执行命令

python test.py

输出识别的文字说明成功。 

五、java调用

 private String getOrc(MultipartFile file) throws IOException {

        try {

            StringBuilder result = new StringBuilder();



            HttpHeaders headers = new HttpHeaders();

            //设置请求头格式

            headers.setContentType(MediaType.APPLICATION_JSON);

            //构建请求参数

            MultiValueMap<String, String> map = new LinkedMultiValueMap<String, String>();

            InputStream imagePath = new FileInputStream(ToFile.multipartFiletoFile(file));

            //添加请求参数images,并将Base64编码的图片传入

            map.add("images", ImageToBase64(imagePath));

            //构建请求

            HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<MultiValueMap<String, String>>(map, headers);

            RestTemplate restTemplate = new RestTemplate();

            //发送请求, springboot内置的restTemplate

            Map json = restTemplate.postForEntity("http://192.168.1.5:8866/predict/ocr_system", request, Map.class).getBody();

            System.out.println(json);

            List<List<Map>> jsons = (List<List<Map>>) json.get("results");

            System.out.println(jsons);



            for (int i = 0; i < jsons.get(0).size(); i++) {

                //System.out.println("当前的文字是:" + jsons.get(0).get(i).get("text"));

                // 这里光靠这个trim()有些空格是去除不掉的,所以还需要使用替换这个,双重保险

                result.append(jsons.get(0).get(i).get("text").toString().trim().replace(" ", ""));

            }

            String trim = result.toString().trim();

            return trim;

        }catch (RestClientException e) {

            log.error("请启动识别服务部署!!!");

            e.printStackTrace();

            throw new InternalServerException("验证服务错误");

            // Map<String, String> maps = new HashMap<>();

            // maps.put("names", "");

        }





    }



    private String ImageToBase64(InputStream imgPath) {

        byte[] data = null;

        // 读取图片字节数组

        //Read the image byte array

        try {

            InputStream in = imgPath;

            System.out.println(imgPath);

            data = new byte[in.available()];

            in.read(data);

            in.close();

        } catch (IOException e) {

            e.printStackTrace();

        }

        // 对字节数组Base64编码

        //Base64 encoding of byte array

        BASE64Encoder encoder = new BASE64Encoder();

        // 返回Base64编码过的字节数组字符串

        //Returns a Base64 encoded byte array string

        //System.out.println("图片转换Base64:" + encoder.encode(Objects.requireNonNull(data)));

        return encoder.encode(Objects.requireNonNull(data));

    }

  • 12
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值