首页 > 编程语言 >python easyocr和cv2实现名片识别及裁剪摆正

python easyocr和cv2实现名片识别及裁剪摆正

时间:2023-02-09 23:56:08浏览次数:59  
标签:min python list region cv2 easyocr BASE ROTA

公司希望能做一个名片裁剪和识别功能。我来开发小程序,在寻找合适的api的途中,因嫌弃乙方弄得太慢,自己百度搞了个python版本的。很久没用python了好多基础方法都忘记了,实现的很草率。

效果图,识别的准确度还得微调,资源包应该还得训练啥的。

命令:

pip install opencv-python==4.1.2.30 -i https://pypi.tuna.tsinghua.edu.cn/simple

python代码(与原作者代码有差异):

# -*- coding:utf-8 -*-
import easyocr
import time

import cv2
import numpy as np
from PIL import Image

# 可信度最小阈值
BASE_MIN = 0.1 
BASE_ROTA = 0
time1 = time.time()
url = './1.jpg'
reader = easyocr.Reader(['ch_sim','en'],gpu=True)

result = reader.readtext(url,batch_size =100,rotation_info=[90,180,270],low_text=0.4,slope_ths=0.3,beamWidth =1,min_size=50)

numLis = [0,0,0,0]
for i in result:
    numLis[i[3]] = numLis[i[3]]+1
for i in range(len(numLis)):
    if(numLis[i]>numLis[BASE_ROTA]):
        BASE_ROTA = i
for i in result:
    if(float(i[2])>BASE_MIN and i[3] == BASE_ROTA):
        print(i[1])


image = cv2.imread(url)

# 灰度图
img=cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 二值化
ret , thresh = cv2.threshold(img, 230, 255, cv2.THRESH_BINARY_INV)

contours, hierarchy = cv2.findContours(cv2.Canny(img,80,100),cv2.RETR_LIST,cv2.CHAIN_APPROX_NONE)


dot=[]  # 用来保存所有轮廓返回的坐标点。
for c in contours:
    # 找到边界坐标
    min_list=[] # 保存单个轮廓的信息,x,y,w,h,area。 x,y 为起始点坐标
    x, y, w, h = cv2.boundingRect(c)  # 计算点集最外面的矩形边界
    min_list.append(x)
    min_list.append(y)
    min_list.append(w)
    min_list.append(h)
    min_list.append(w*h) # 把轮廓面积也添加到 dot 中
    dot.append(min_list)

max_area=dot[0][4]
for inlist in dot:
    area=inlist[4]
    if area >= max_area:
        x=inlist[0]
        y=inlist[1]
        w=inlist[2]
        h=inlist[3]
        max_area=area
# 在原图上画出最大的矩形
cv2.rectangle(image, (x, y), (x + w , y + h ), (0, 255, 0), 1)

cv2.imwrite('big.jpg',image)

img = Image.open('big.jpg')
region = img.crop((x, y, x + w, y + h))

if(BASE_ROTA == 1):
    region = region.transpose(Image.ROTATE_90)
elif(BASE_ROTA == 2):
    region = region.transpose(Image.ROTATE_180)
elif(BASE_ROTA == 3):
    region = region.transpose(Image.ROTATE_270)
region.save('result.jpg')
time2 = time.time()

print("绘制结束,用时:",time2-time1)

需要修改一下easyocr的包返回一个识别的方向供图片裁剪摆正:

 

 



参考链接:
使用cv2报错:https://blog.csdn.net/iLOVEJohnny/article/details/126466515;

下载cv2:https://blog.csdn.net/songyuc/article/details/102855144

识别文字:https://blog.csdn.net/weixin_47046791/article/details/124149260

最大矩形以及裁剪:https://blog.csdn.net/aqqwvfbukn/article/details/120787480

标签:min,python,list,region,cv2,easyocr,BASE,ROTA
From: https://www.cnblogs.com/alecc1124/p/17107481.html

相关文章

  • Python分析睡眠数据
    在19年11月的时候买了一个运动手环,然后时不时会用它来记录睡眠数据;积累到现在已经有40个月了。现在想要调整作息,分析一下这些数据,来制定合理的作息计划。 图1月平均入......
  • Python 异步: 使用和查询任务(8)
    任务是异步程序的货币。在本节中,我们将仔细研究如何在我们的程序中与它们交互。1.任务生命周期异步任务具有生命周期。首先,任务是从协程创建的。然后安排在事件循环中独......
  • python pass语句
    pass语句是一个空语句,为了保持程序的完整性。不做任何事情,一般用作占位if__name__=='__main__':foriinrange(10):ifi==5:pass......
  • python学习——【第五弹】
    前言上一篇文章​​python学习——【第四弹】​​不可变序列字符串和可变序列列表;今天这篇文章接着介绍不可变序列元组。元组元组是python内置的数据结构之一,有序,可多......
  • Python 安装使用cx_Oracle操作Oracle数据库
    cx_Oracle是一个能够访问Oracle数据库的Python扩展模块。它符合Python数据库API2.0规范,并增加了相当多的内容和几个排除项。Python连接使用Oracle数据需要使用c......
  • python实现百度贴吧页面爬取
    importrequestsclassTiebaSpider:"""百度贴吧爬虫类"""def__init__(self,tieba_name)->None:self.tieba_name=tieba_nameself.ur......
  • [oeasy]python0078_设置索引颜色_index_color_ansi_控制终端颜色
    更多颜色回忆上次内容上次了解了高亮颜色91-97是高亮前景色101-107是高亮背景色颜色种类在原来基础上增加了一些但也非常有限还想要更精细的颜色有可能吗??......
  • Python 5.垃圾回收机制与运算符
    一、垃圾回收机制1.定义垃圾回收机制(简称GC)是Python解释器自带一种机,专门用来回收不可用的变量值所占用的内存空间。 2.为什么要有垃圾回收机制程序运行过程......
  • python bottle实现web服务
    server:当调用http://xxx.xxx.xxx.xxx:4500/push时就会触发get_push函数frombottleimportrun,route,requestimportloggingimporttimeimportosfilename=s......
  • python mqtt服务器搭建
    一.在Linux中搭建mqtt服务环境:Linux版本Ubuntu 18.04.1 LTS1.进入https://www.emqx.com/zh/try?product=broker下载开源版本 EMQX 此处选择zip格式2.下载后将e......