女友:啥,识别个文字还要付费?我立马用Python实现了一款免费版文字识别工具[通俗易懂]

女友:啥,识别个文字还要付费?我立马用Python实现了一款免费版文字识别工具[通俗易懂]导语有一天和女朋友聊天,翻着手机上的软件,看电影、看编程网站,她说到:“这么多APP,怎么就没一个做文字识别很方便的呢?我经常读书读到一段话想把它摘抄下来,可是这些软件不是打开进入文字识别步骤很复杂,就是限制识别次数,要么就是限制编辑,很多识别软件还都是付费的,好烦“。然后程序员小哥说:“要不我给你做一个免费版本文字识别小程序?”话不多话,对象第一,开干~~~​​​正文程序原理简介:python利用百度文字识别功能,实现对上传的图片进行扫描,获取图片的文字信…

大家好,又见面了,我是你们的朋友全栈君。

导语

      有一天和女朋友聊天,翻着手机上的软件,看电影、看编程网站, 她说到:“这么多 APP,怎么就没一个做文字识别很方便的呢?

女友:啥,识别个文字还要付费?我立马用Python实现了一款免费版文字识别工具[通俗易懂]

我经常读书读到一段话想把它摘抄下来,可是这些软件不是打开进入文字识别步骤很复杂,就是限制识别次数,要么就是限制编辑,很多识别软件还都是付费的,好烦“。

然后程序员小哥说:“要不我给你做一个免费版本文字识别小程序?” 话不多话,对象第一,开干~~~

女友:啥,识别个文字还要付费?我立马用Python实现了一款免费版文字识别工具[通俗易懂]女友:啥,识别个文字还要付费?我立马用Python实现了一款免费版文字识别工具[通俗易懂]​​

正文

程序原理简介:

python利用百度文字识别功能,实现对上传的图片进行扫描,获取图片的文字信息。

环境安装部分:PyQt5界面化程序。

版本:Python3,如下模块以及一些自带的模块。

# 引入第三方模块
import requests, base64
from PIL import Image

选择图片类型为.jpg,.png。

# 选择图片执行方法 def openfile(self): 

# 启动选择文件对话空,查找jpg以及png图片 

self.download_path = QFileDialog.getOpenFileName(self, "选择要识别的图片", os.getcwd(), "Image Files(*.jpg *.png)")

进行图片识别:

 图片识别(API) ''' 

 request_url = "https://aip.baidubce.com/rest/2.0/ocr/v1/webimage" 

 # 二进制方式打开图片文件 f = open(self.download_path[0], 'rb') img = base64.b64encode(f.read())params = {"image": img} 

 # access_token = '[调用鉴权接口获取的token]' request_url = request_url + "?access_token=" + baiduToken headers = {'content-type': 'application/x-www-form-urlencoded'} 

 response = requests.post(request_url, data=params, headers=headers) if response: # print(response.json()) return response.json()

效果图:

女友:啥,识别个文字还要付费?我立马用Python实现了一款免费版文字识别工具[通俗易懂]

附完整项目代码:

from PyQt5.QtWidgets import *
from PyQt5.QtGui import *

# 引入自定义模块
import dc
# 引入内置模块
import sys
import os
# 引入第三方模块
import requests, base64
from PIL import Image

class parentWindow(QWidget, dc.Ui_Form):
    # 初始化方法
    def __init__(self):
        # 找到父类 首页面
        super(parentWindow, self).__init__()
        # 初始化页面方法
        self.setupUi(self)
        # 点击选择图片
        self.selectImg.clicked.connect(self.openfile)
        # 点击查看图片
        self.viewImg.clicked.connect(self.viewbtn)

    # 选择图片执行方法
    def openfile(self):
        # 启动选择文件对话空,查找jpg以及png图片
        self.download_path = QFileDialog.getOpenFileName(self, "选择要识别的图片", os.getcwd(), "Image Files(*.jpg *.png)")
        # 判断是否选择图片
        if not self.download_path[0].strip():
            QMessageBox.information(self, '提示信息', '没有选择名片图片')
            pass
        else:
            # pixmap解析图片
            pixmap = QPixmap(self.download_path[0])
            # 设置图片
            self.imgLabel.setPixmap(pixmap)
            # 让图片自适应label大小
            self.imgLabel.setScaledContents(True)
            try:
                # 识别名片图片返回识别结果
                content = self.recgImg()
            except:
                QMessageBox.information(self, '提示信息', '识别错误请重新选择图片')

            # 识别图片的数据赋值
            words_result = content['words_result']
            # print(words_result)
            text = ''
            for item in words_result:
                for v in item.values():
                    text = text + '\n' + v
            self.discernText.setText(text)


    # 识别名片图片
    def recgImg(self):
        # 获取baiduToken
        apikey = '你的apikey'
        seckey = '你的seckey'
        tokenUrl = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=' + apikey + '&client_secret=' + seckey
        res = requests.get(url=tokenUrl, headers={'content-type': 'application/json; charset=UTF-8'}).json()
        baiduToken = res['access_token']

        '''
        图片识别(API)
        '''
        request_url = "https://aip.baidubce.com/rest/2.0/ocr/v1/webimage"
        # 二进制方式打开图片文件
        f = open(self.download_path[0], 'rb')
        img = base64.b64encode(f.read())

        params = {"image": img}
        # access_token = '[调用鉴权接口获取的token]'
        request_url = request_url + "?access_token=" + baiduToken
        headers = {'content-type': 'application/x-www-form-urlencoded'}
        response = requests.post(request_url, data=params, headers=headers)
        if response:
            # print(response.json())
            return response.json()

    # 点击查看图片显示大图功能
    def viewbtn(self):
        if self.download_path:
            # 使用电脑中的看图工具打开图片
            img = Image.open(self.download_path[0])
            # 显示图片
            img.show()
        else:
            QMessageBox.information(self, '提示信息', '先选择名片图片')

if __name__ == '__main__':
    # 每一个PyQt5应用都必须创建一个应用对象
    app = QApplication(sys.argv)
    # 初始化页面
    window = parentWindow()
    # 显示首页
    window.show()
    sys.exit(app.exec_())

女友:啥,识别个文字还要付费?我立马用Python实现了一款免费版文字识别工具[通俗易懂]总结

好啦!文字识别系统就完成了,拿去!不谢~

记得三连就好~​??源码基地:关注小编获取哦~?记得三连吖

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/140547.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Jenkins安装_jenkins sonar

    Jenkins安装_jenkins sonar前言jenkins的环境搭建方法有很多,本篇使用docker快速搭建一个jenkins环境。环境准备:mac/Linuxdockerdocker拉去jenkins镜像先下载jenkins镜

    2022年7月29日
    9
  • Unity Cutout材质 实现网格效果[通俗易懂]

    Unity Cutout材质 实现网格效果[通俗易懂]Cutout????效果????贴图准备????材质制作????效果????如图所示铁丝网不是模型只是一张128*128的贴图制作的材质,这样可以极大的降低模型面数制作也很速度!????贴图准备????ps中制作一张128*128尺寸带透明通道的图,如下所示:????材质制作????设置RenderingMode为Cutout模式,并且把贴图放到Albedo槽中????可以调节Tiling属性增加或减少网格密度…

    2022年9月23日
    7
  • XAMPP安装Windows10

    XAMPP安装Windows10下载XAMPPhttps://sourceforge.net/projects/xampp/files/我下载的是XAMPP7.4.3之后直接双击安装,尽量不要装在C盘,一直点下一步就好了安装完成后会有这样的界面(XAMPP控制面板窗口)(Apache和MySQL之前有写安装教程)点击“Apache”的“Config”键选择“Apache(httpd.conf)”,打开配置文件找…

    2022年7月15日
    18
  • 卷积核(kernels)与滤波器(filters)的关系「建议收藏」

    卷积核(kernels)与滤波器(filters)的关系「建议收藏」简单理解:卷积核:二维的矩阵滤波器:多个卷积核组成的三维矩阵,多出的一维是通道。先介绍一些术语:layers(层)、channels(通道)、featuremaps(特征图),filters(滤波器),kernels(卷积核)。从层次结构的角度来看,层和滤波器的概念处于同一水平,而通道和卷积核在下一级结构中。通道和特征图是同一个事情。一层可以有多个通道(或者说特征图)。如果输入的是一个R…

    2022年5月21日
    36
  • 1100000/1011模二除法_四位数除以两位数的除法算式

    1100000/1011模二除法_四位数除以两位数的除法算式原题链接这里所谓的“光棍”,并不是指单身汪啦~ 说的是全部由1组成的数字,比如1、11、111、1111等。传说任何一个光棍都能被一个不以5结尾的奇数整除。比如,111111就可以被13整除。 现在,你的程序要读入一个整数x,这个整数一定是奇数并且不以5结尾。然后,经过计算,输出两个数字:第一个数字s,表示x乘以s是一个光棍,第二个数字n是这个光棍的位数。这样的解当然不是唯一的,题目要求你输出最小的解。提示:一个显然的办法是逐渐增加光棍的位数,直到可以整除x为止。但难点在于,s可能是个非常大的数 ——

    2022年8月9日
    9
  • java jasypt_jasypt命令行工具的使用说明

    java jasypt_jasypt命令行工具的使用说明jasypt能够以很简单的方式为Java项目提供加密功能,这种简单的方式体现着它的命令行工具,与Spring,Hibernate,Springsecurity,wicket等第三方框架的集成。本文参加jasypt官方网站:http://www.jasypt.org/下载jasypt包,解压缩到本地目录。如下图:根目录:命令行工具目录:说明:在lib目录下是jasypt的核心jar和与第三方组件…

    2022年9月26日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号