为啥在将命令行图像文件中的参数作为参数传递时出现错误
Posted
技术标签:
【中文标题】为啥在将命令行图像文件中的参数作为参数传递时出现错误【英文标题】:Why am getting errors while passing argumets from commad line image file as an argument为什么在将命令行图像文件中的参数作为参数传递时出现错误 【发布时间】:2021-09-30 06:23:17 【问题描述】: import argparse
from PIL import Image
from pytesseract import *
def image_to_text(image):
pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'
result = pytesseract.image_to_string(image, lang='eng')
return result
if __name__ == "__main__":
ap = argparse.ArgumentParser()
ap.add_argument("-i", "--input", type = open, required = True, help='path to input image')
args = vars(ap.parse_args())
img = Image.open(ap)
print(image_to_text(img))
使用命令行参数执行此代码后,将参数作为图像作为输入传递,出现以下错误。请帮助我为什么会发生这些错误。
Traceback(最近一次调用最后一次):
文件“C:\Users\Chaitanya\AppData\Local\Programs\Python\Python37\lib\site-packages\PIL\Image.py”,第 2972 行,打开
fp.seek(0)
AttributeError: 'ArgumentParser' 对象没有属性 'seek'
在处理上述异常的过程中,又发生了一个异常: Traceback(最近一次调用最后一次):
文件“C:\Users\Chaitanya\Desktop\image\code.py”,第 18 行,
img = Image.open(ap)
文件“C:\Users\Chaitanya\AppData\Local\Programs\Python\Python37\lib\site-packages\PIL\Image.py”,第 2974 行,打开
fp = io.BytesIO(fp.read())
AttributeError: 'ArgumentParser' 对象没有属性 'read'
【问题讨论】:
添加print(args)
行,这样您就可以准确地看到解析器做了什么。
【参考方案1】:
ap
是参数解析器。它不是文件名,因此您不能将其作为文件名传递。您应该删除type=open
,因为您真的不希望 arg 解析器打开它,然后将 Image 行更改为
args = ap.parse_args()
img = Image.open(args.input)
您想要解析的结果,而不是解析器本身。也就是说,args.input
将包含在--input
参数中指定的文件名。
【讨论】:
谢谢,更改答案后我收到以下错误 C:\Users\Chaitanya\Desktop\image>code.py --input imagetotext.png Traceback(最近一次通话最后一次):文件“ C:\Users\Chaitanya\Desktop\image\code.py",第 18 行,在vars()
。这在这里完全没有必要。只是把它作为一个对象。反正这样更方便。我调整了答案。以上是关于为啥在将命令行图像文件中的参数作为参数传递时出现错误的主要内容,如果未能解决你的问题,请参考以下文章