Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用opencv和PyteSeract python提取文本?_Python_Opencv_Python Tesseract_Image Preprocessing_Labelimg - Fatal编程技术网

如何使用opencv和PyteSeract python提取文本?

如何使用opencv和PyteSeract python提取文本?,python,opencv,python-tesseract,image-preprocessing,labelimg,Python,Opencv,Python Tesseract,Image Preprocessing,Labelimg,我正在使用labelImg在图像行上绘制一个矩形。这给了我xml文件。在这个xml的帮助下,如何从图像表中提取文本。为了提取文本,我使用了水平线和垂直线检测,但没有得到很好的结果。现在我正在使用labelImg,它给了我想要提取的文本的点,但我不知道如何应用这个方法。请告诉我如何做 我的xml文件: <annotation> <folder>Test Images</folder> <filename>FreKa.j

我正在使用labelImg在图像行上绘制一个矩形。这给了我xml文件。在这个xml的帮助下,如何从图像表中提取文本。为了提取文本,我使用了水平线和垂直线检测,但没有得到很好的结果。现在我正在使用labelImg,它给了我想要提取的文本的点,但我不知道如何应用这个方法。请告诉我如何做

我的xml文件:

    <annotation>
      <folder>Test Images</folder>
      <filename>FreKa.jpg</filename>
      <path>/home/sumit/Desktop/office_works/Fusion_Code/BIS_Final/Test Images/FreKa.jpg</path>
      <source>
         <database>Unknown</database>
        </source>
      <size>
         <width>679</width>
         <height>341</height>
         <depth>3</depth>
         </size>
         <segmented>0</segmented>
       <object>
         <name>Contact Type</name>
         <pose>Unspecified</pose>
         <truncated>1</truncated>
         <difficult>0</difficult>
         <bndbox>
           <xmin>1</xmin>
           <ymin>100</ymin>
           <xmax>678</xmax>
           <ymax>157</ymax>
        </bndbox>
       </object>
       </annotation>

如何借助xml文件从表中提取合同类型?
感谢…

获得
xmin
您可以将
xpath()
'//annotation/object/bndbox/xmin'
或更短的
'//xmin'

它总是给出列表(即使只有一个元素或没有元素),所以它需要
[0]
来获取第一个元素,或者
来使用所有元素

使用
if list of elements:…
只能在列表中包含某些元素时运行代码

您还可以使用
len()
检查得到的元素数量

text = '''
<annotation>
  <folder>Test Images</folder>
  <filename>FreKa.jpg</filename>
  <path>/home/sumit/Desktop/office_works/Fusion_Code/BIS_Final/Test Images/FreKa.jpg</path>
  <source>
     <database>Unknown</database>
  </source>
  <size>
     <width>679</width>
     <height>341</height>
     <depth>3</depth>
  </size>
  <segmented>0</segmented>
  <object>
     <name>Contact Type</name>
     <pose>Unspecified</pose>
     <truncated>1</truncated>
     <difficult>0</difficult>
     <bndbox>
       <xmin>1</xmin>
       <ymin>100</ymin>
       <xmax>678</xmax>
       <ymax>157</ymax>
     </bndbox>
  </object>
</annotation>
'''

import lxml.etree

tree = lxml.etree.fromstring(text)

print('xmin:', tree.xpath("//annotation/object/bndbox/xmin")[0].text)
print('xmin:', tree.xpath("//bndbox/xmin")[0].text)
print('xmin:', tree.xpath("//object//xmin")[0].text)
print('xmin:', tree.xpath("//xmin")[0].text)

print('xmin:', tree.xpath("//xmin/text()")[0])  # with `text()` instead of `.text`

for item in tree.xpath("//xmin/text()"):
    print('xmin:', item)  # with `text()` instead of `.text`

objects = tree.xpath("//object")
print('len(objects):', len(objects))

other = tree.xpath("//bndbox/other")
if other:
    print('found', len(other), 'elements')
else:
    print('there is no "other" elements')
text=''
测试图像
FreKa.jpg
/主页/sumit/桌面/办公室工作/融合代码/最终/测试图像/FreKa.jpg
不为人知
679
341
3.
0
接触式
未指明
1.
0
1.
100
678
157
'''
导入lxml.etree
tree=lxml.etree.fromstring(文本)
print('xmin:',tree.xpath(“//annotation/object/bndbox/xmin”)[0].text)
打印('xmin:',tree.xpath(“//bndbox/xmin”)[0].text)
打印('xmin:',tree.xpath(“//object//xmin”)[0].text)
打印('xmin:',tree.xpath(“//xmin”)[0].text)
打印('xmin:',tree.xpath(“//xmin/text()”)[0])#时使用'text()'而不是'.text'`
对于tree.xpath(“//xmin/text()”)中的项:
打印('xmin:',item)#使用'text()'而不是'.text'`
objects=tree.xpath(“//对象”)
打印('len(对象):',len(对象))
other=tree.xpath(“//bndbox/other”)
如果其他:
打印('found',len(其他),'elements')
其他:
打印('没有“其他”元素')

您希望获取xml中的哪个值?您可以在模块
lxml
中使用
xpath()
,也可以使用regex-
re.findall(“(\d+”),text)
在xml的帮助下提取图像的第三行。您能告诉我如何获取对象名称(如合同、合同描述等)吗使用xml?如果您的意思是
,那么
//annotation/object
应该为您提供包含所有
的列表,然后您可以使用
len(包含对象的列表)
。或者你也可以使用
//注释/对象/名称
-它应该给你所有名称的列表,你可以使用
len(名称列表)
Hi@furas,你能告诉我如何计算边界框内的行数吗,这些行数由一些单词(印地语)填充?我不知道我是否理解这个问题:首先,您必须将方框转换为字符串,然后您必须检查是否有一些印地语字符。或者检查是否有与英语字符不同的字符-可能更简单。