使用 flask_restful 时出现 404 错误。需要 return 输出作为休息 api 响应
404 error while using flask_restful. Need to return the output as a rest api response
我有一个代码可以在 python 中执行 ocr 或将 pdf 转换为 txt,并使用基于正则表达式的方法找出文档类别。我希望我的代码公开为 api。我正在使用烧瓶来完成这项任务。 运行 url.
时出现 404 Not Found 错误
我的文档类别提取代码如下:文件名是 dtd.py
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
from pdfminer.pdfpage import PDFPage
from io import StringIO
import re
import io
from PIL import Image
import pytesseract
from wand.image import Image as wi
def convert(fname, pages=None,encoding='utf-8'):
if not pages:
pagenums = set()
else:
pagenums = set(pages)
output = StringIO()
manager = PDFResourceManager()
converter = TextConverter(manager, output, laparams=LAParams())
interpreter = PDFPageInterpreter(manager, converter)
infile = open(fname, 'rb')
for page in PDFPage.get_pages(infile, pagenums):
interpreter.process_page(page)
infile.close()
converter.close()
text = output.getvalue()
if len(text)>=500:
regex3=re.search(r"\d+(?:[.-]\w+)*\s*(General Information|Process validation|Manufacturer(s)Reference Standards or Materials|Container Closure Systems|Stability Summary and Conclusions|Post Approval Stability Protocol and Stability Commitment)",text,re.IGNORECASE)
return regex3
else:
pdffile = wi(filename = fname, resolution = 300)
pdfImg = pdffile.convert('jpeg')
imgBlobs = []
for img in pdfImg.sequence:
page = wi(image = img)
imgBlobs.append(page.make_blob('jpeg'))
# pytesseract.pytesseract.tesseract_cmd = r"C:\Program Files\Tesseract-OCR\tesseract.exe"
# extracted_text = []
for imgBlob in imgBlobs:
im= Image.open(io.BytesIO(imgBlob))
text2 = pytesseract.image_to_string(im, lang = 'eng')
regex3=re.search(r"\d+(?:[.-]\w+)*\s*(General Information|Manufacturer(s)|Process Validation|Batch Formula|Description of Manufacturing Process and Process Controls|Container Closure Systems|Stability Summary and Conclusions|Post Approval Stability Protocol and Stability Commitment)",text2,re.IGNORECASE)
return regex3
convert(r'D:\files[=13=]ac4250-d746-4c8a-b3-2798b0c2d4f9.pdf')
我的flask api代码是这样的:叫做app.py
import dtd
from dtd import convert
from flask import Flask, request
from flask_restful import Resource, Api
#from flask.views import MethodView
app = Flask(__name__)
api = Api(app)
#convert(r'D:\filescecf40-71cf-4fc4-82e1-696ca41a9fba.pdf')
class dtdtext(Resource):
def get(self, result):
return {'data': dtd.convert(result)}
#api.add_resource(dtdtext, '/dtd/<result>')
categories=convert(r'D:\filescecf40-71cf-4fc4-82e1-696ca41a9fba.pdf')
@app.route('/dtd')
def returnResult():
return {'data': categories}
if __name__ == '__main__':
app.run()
dtd.py 将 return 类别示例的名称 'Manufacturers' 我想将其显示为休息 api。如何有效地做到这一点
500 堆栈跟踪中的内部错误:
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
127.0.0.1 - - [02/Jul/2019 17:58:42] "GET / HTTP/1.1" 404 -
[2019-07-02 17:58:47,184] ERROR in app: Exception on /dtd [GET]
Traceback (most recent call last):
File "C:\Users\biltu\Anaconda3\lib\site-packages\flask\app.py", line 1982, in wsgi_app
response = self.full_dispatch_request()
File "C:\Users\biltu\Anaconda3\lib\site-packages\flask\app.py", line 1615, in full_dispatch_request
return self.finalize_request(rv)
File "C:\Users\biltu\Anaconda3\lib\site-packages\flask\app.py", line 1630, in finalize_request
response = self.make_response(rv)
File "C:\Users\biltu\Anaconda3\lib\site-packages\flask\app.py", line 1740, in make_response
rv = self.response_class.force_type(rv, request.environ)
File "C:\Users\biltu\Anaconda3\lib\site-packages\werkzeug\wrappers.py", line 921, in force_type
response = BaseResponse(*_run_wsgi_app(response, environ))
File "C:\Users\biltu\Anaconda3\lib\site-packages\werkzeug\test.py", line 923, in run_wsgi_app
app_rv = app(environ, start_response)
TypeError: 'dict' object is not callable
而不是 api.add_resource(dtdtext, '/dtd/<result>')
你应该声明一个函数如下:
categories=convert(r'D:\filescecf40-71cf-4fc4-82e1-696ca41a9fba.pdf')
@app.route('/dtd')
def returnResult()
return str({'data': categories})
我没有真正得到你想要的东西 return,这个 return 是从你的转换函数 return 编辑的类别。
如果您想匹配可用类别 return 从 REST 中的转换函数 api 编写如下路径:
categories=convert(r'D:\filescecf40-71cf-4fc4-82e1-696ca41a9fba.pdf')
@app.route('/dtd/<restCategory>')
def returnResult(restCategory)
if restCategory in categories:
DO_SOMETHING_HERE
我有一个代码可以在 python 中执行 ocr 或将 pdf 转换为 txt,并使用基于正则表达式的方法找出文档类别。我希望我的代码公开为 api。我正在使用烧瓶来完成这项任务。 运行 url.
时出现 404 Not Found 错误我的文档类别提取代码如下:文件名是 dtd.py
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
from pdfminer.pdfpage import PDFPage
from io import StringIO
import re
import io
from PIL import Image
import pytesseract
from wand.image import Image as wi
def convert(fname, pages=None,encoding='utf-8'):
if not pages:
pagenums = set()
else:
pagenums = set(pages)
output = StringIO()
manager = PDFResourceManager()
converter = TextConverter(manager, output, laparams=LAParams())
interpreter = PDFPageInterpreter(manager, converter)
infile = open(fname, 'rb')
for page in PDFPage.get_pages(infile, pagenums):
interpreter.process_page(page)
infile.close()
converter.close()
text = output.getvalue()
if len(text)>=500:
regex3=re.search(r"\d+(?:[.-]\w+)*\s*(General Information|Process validation|Manufacturer(s)Reference Standards or Materials|Container Closure Systems|Stability Summary and Conclusions|Post Approval Stability Protocol and Stability Commitment)",text,re.IGNORECASE)
return regex3
else:
pdffile = wi(filename = fname, resolution = 300)
pdfImg = pdffile.convert('jpeg')
imgBlobs = []
for img in pdfImg.sequence:
page = wi(image = img)
imgBlobs.append(page.make_blob('jpeg'))
# pytesseract.pytesseract.tesseract_cmd = r"C:\Program Files\Tesseract-OCR\tesseract.exe"
# extracted_text = []
for imgBlob in imgBlobs:
im= Image.open(io.BytesIO(imgBlob))
text2 = pytesseract.image_to_string(im, lang = 'eng')
regex3=re.search(r"\d+(?:[.-]\w+)*\s*(General Information|Manufacturer(s)|Process Validation|Batch Formula|Description of Manufacturing Process and Process Controls|Container Closure Systems|Stability Summary and Conclusions|Post Approval Stability Protocol and Stability Commitment)",text2,re.IGNORECASE)
return regex3
convert(r'D:\files[=13=]ac4250-d746-4c8a-b3-2798b0c2d4f9.pdf')
我的flask api代码是这样的:叫做app.py
import dtd
from dtd import convert
from flask import Flask, request
from flask_restful import Resource, Api
#from flask.views import MethodView
app = Flask(__name__)
api = Api(app)
#convert(r'D:\filescecf40-71cf-4fc4-82e1-696ca41a9fba.pdf')
class dtdtext(Resource):
def get(self, result):
return {'data': dtd.convert(result)}
#api.add_resource(dtdtext, '/dtd/<result>')
categories=convert(r'D:\filescecf40-71cf-4fc4-82e1-696ca41a9fba.pdf')
@app.route('/dtd')
def returnResult():
return {'data': categories}
if __name__ == '__main__':
app.run()
dtd.py 将 return 类别示例的名称 'Manufacturers' 我想将其显示为休息 api。如何有效地做到这一点
500 堆栈跟踪中的内部错误:
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
127.0.0.1 - - [02/Jul/2019 17:58:42] "GET / HTTP/1.1" 404 -
[2019-07-02 17:58:47,184] ERROR in app: Exception on /dtd [GET]
Traceback (most recent call last):
File "C:\Users\biltu\Anaconda3\lib\site-packages\flask\app.py", line 1982, in wsgi_app
response = self.full_dispatch_request()
File "C:\Users\biltu\Anaconda3\lib\site-packages\flask\app.py", line 1615, in full_dispatch_request
return self.finalize_request(rv)
File "C:\Users\biltu\Anaconda3\lib\site-packages\flask\app.py", line 1630, in finalize_request
response = self.make_response(rv)
File "C:\Users\biltu\Anaconda3\lib\site-packages\flask\app.py", line 1740, in make_response
rv = self.response_class.force_type(rv, request.environ)
File "C:\Users\biltu\Anaconda3\lib\site-packages\werkzeug\wrappers.py", line 921, in force_type
response = BaseResponse(*_run_wsgi_app(response, environ))
File "C:\Users\biltu\Anaconda3\lib\site-packages\werkzeug\test.py", line 923, in run_wsgi_app
app_rv = app(environ, start_response)
TypeError: 'dict' object is not callable
而不是 api.add_resource(dtdtext, '/dtd/<result>')
你应该声明一个函数如下:
categories=convert(r'D:\filescecf40-71cf-4fc4-82e1-696ca41a9fba.pdf')
@app.route('/dtd')
def returnResult()
return str({'data': categories})
我没有真正得到你想要的东西 return,这个 return 是从你的转换函数 return 编辑的类别。
如果您想匹配可用类别 return 从 REST 中的转换函数 api 编写如下路径:
categories=convert(r'D:\filescecf40-71cf-4fc4-82e1-696ca41a9fba.pdf')
@app.route('/dtd/<restCategory>')
def returnResult(restCategory)
if restCategory in categories:
DO_SOMETHING_HERE