python - 从带有坐标的名片图像中提取徽标和文本
问题描述
我有一张名片。我想从带有坐标的名片中获取徽标和所有文本。所以我可以使上传的图像在 HTML Canvas 上可编辑。我看过很多例子,但我找不到我正在寻找的确切例子。我只发现从图像中获取文本。我也尝试使用 Google Vision API,但它也只提供文本。我是python的新手。
这是一个示例图像。
在以下代码中,我必须选择要提取的徽标。我需要它自动查找和提取。
# import the necessary packages
import argparse
import cv2
# initialize the list of reference points and boolean indicating
# whether cropping is being performed or not
ref_point = []
cropping = False
def shape_selection(event, x, y, flags, param):
# grab references to the global variables
global ref_point, cropping
# if the left mouse button was clicked, record the starting
# (x, y) coordinates and indicate that cropping is being
# performed
if event == cv2.EVENT_LBUTTONDOWN:
ref_point = [(x, y)]
cropping = True
# check to see if the left mouse button was released
elif event == cv2.EVENT_LBUTTONUP:
# record the ending (x, y) coordinates and indicate that
# the cropping operation is finished
ref_point.append((x, y))
cropping = False
# draw a rectangle around the region of interest
cv2.rectangle(image, ref_point[0], ref_point[1], (0, 255, 0), 2)
cv2.imshow("image", image)
# construct the argument parser and parse the arguments
ap = argparse.ArgumentParser()
ap.add_argument("-i", "--image", required=True, help="Path to the image")
args = vars(ap.parse_args())
# load the image, clone it, and setup the mouse callback function
image = cv2.imread(args["image"])
clone = image.copy()
cv2.namedWindow("image")
cv2.setMouseCallback("image", shape_selection)
# keep looping until the 'q' key is pressed
while True:
# display the image and wait for a keypress
cv2.imshow("image", image)
key = cv2.waitKey(1) & 0xFF
# if the 'r' key is pressed, reset the cropping region
if key == ord("r"):
image = clone.copy()
# if the 'c' key is pressed, break from the loop
elif key == ord("c"):
break
# if there are two reference points, then crop the region of interest
# from teh image and display it
if len(ref_point) == 2:
crop_img = clone[ref_point[0][1]:ref_point[1][1], ref_point[0][0]:ref_point[1][0]]
cv2.imshow("crop_img", crop_img)
cv2.waitKey(0)
# close all open windows
cv2.destroyAllWindows()
解决方案
您可以试试 ABBYY 云 API:
https://www.abbyy.com/en-gb/cloud-ocr-sdk/features/
该 API 将为您提供带有坐标的所有文本,并且您也可以将图像元素(只要可检测到)作为纯图像返回。通过一些逻辑,您可以将它们放在一起以生成一个文档,其中包含所有文本元素作为真实文本,所有图像作为正确位置的图像。
但请记住,在 OCR 开始之前对图像进行了一些预处理。这意味着图像的质量可能已经改变。因此,使用从 API 获得的坐标从原始扫描中提取图像部分可能是个好主意。
https://www.ocrsdk.com/documentation/specifications/export-formats/
该 API 非常好,可以为您提供与谷歌云视觉非常相似的 OCR 结果。而且你有更多的特征和参数来调整结果。但是 ABBYY API 比 google API 贵很多。
推荐阅读
- python - 子进程的信号处理程序和coverage.py的atexit
- veins - 如何更改 Veins-LTE 中的消息频率
- sockets - 为什么 PrintWriter 不工作?
- json - 使用 Apache Camel + Jetty 组件的 GET 请求
- html - 为什么文本框和按钮在不同的屏幕上看起来不布局?
- r - 如何在 agricolae 包中进行事后测试,Tukey?
- python - 虽然是真的,但熊猫数据框不会显示?
- html - 在 mozille firefox 中使单选按钮变大
- swift - Swift 4 WebKit webView 不加载带有添加参数的 URL
- scala - Monad transformer for Future[Either[Error, Option[User]]]