我正在尝试编写一个函数,该函数将获取房屋平面图的 jpg 并使用 OCR 提取写在图像上某处的平方英尺
import requests
from PIL import Image
import pytesseract
import pandas as pd
import numpy as np
import cv2
import io
def floorplan_ocr(url):
""" a row-wise function to use pytesseract to scrape the word data from the floorplan
images, requires tesseract
to be installed https://github.com/tesseract-ocr/tesseract/wiki"""
if pd.isna(url):
return np.nan
res = ''
response = requests.get(url, stream=True)
if response.status_code == 200:
img = response.raw
img = np.asarray(bytearray(img.read()), dtype="uint8")
img = cv2.imdecode(img, cv2.CV_8UC1)
img = cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,\
cv2.THRESH_BINARY,11,2)
#img = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 31, 2)
res = pytesseract.image_to_string(img,, config='--remove-background')
del response
del img
else:
return np.nan
#print(res)
return res
但是,我并没有取得太大的成功。只有大约四分之一的图像实际输出包含平方英尺的文本。
例如当前 floorplan_ocr(https://i.imgur.com/9qwozIb.jpg)
输出'K\'Fréfiéfimmimmuuéé\n2|; apprnxx 135 max\nGArhaPpmxd1m max\n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\nTOTAL APPaux noon AREA 523 so Fr, us. a 50. M )\nav .Wzms him "a! m m... mi unwary mmnmrmm mma y“ mum“;\n‘ wmduw: reams m wuhrmmm mm“ .m nanspmmmmy 3 mm :51\nmm" m mmm m; wan wmumw- mm my and mm mm as m by any\nwfmw PM” rmwm mm m .pwmwm m. mum mud ms nu mum.\n(.5 n: ma undammmw an we Ewen\nM vagw‘m Mewpkeem'
(并且需要很长时间才能完成)
floorplan_ocr(https://i.imgur.com/sjxMpVp.jpg)
输出' '
。
我认为我面临的一些问题是:
文本可能是灰度的
图像是低 DPI(如果这实际上很重要,或者如果它是总分辨率,似乎有些争论)
文本格式不一致
我被困住了,正在努力提高我的成绩。我想提取的只是“XXX sq ft”(以及所有可能的写法)
有一个更好的方法吗?
繁花如伊
慕码人2483693
相关分类