英文:
Flask project always got error "We're sorry, but something went wrong"
问题
I'm a beginner in Flask and I have developed a face-detection application based on it. I had many problems when deploy project on a cPanel host and can solve that one by one. But now have another problem that always say me We're sorry, but something went wrong and I do not know what is problem because has no error in log file.
I have a python_files directory included three files like app.py, passenger_wsgi.py, and prediction_blueprint.py and following are the things that are inside.
app.py file:
import os
from flask import Flask, render_template, request, redirect
from werkzeug.utils import secure_filename
from prediction_blueprint import prediction_blueprint
app = Flask(__name__, template_folder='../templates', static_folder='../static')
app.config['TEMPLATES_AUTO_RELOAD'] = True
app.register_blueprint(prediction_blueprint)
@app.route('/')
def index():
return render_template('./index.html')
@app.route('/upload', methods=['POST'])
def upload():
file = request.files['file']
fn = secure_filename(file.filename)
file.save(os.path.join('../uploads', fn))
return {
"success": True,
"message": fn
}
if __name__ == '__main__':
app.run()
passenger_wsgi.py file:
import imp
import os
import sys
sys.path.insert(0, os.path.dirname(__file__))
wsgi = imp.load_source('wsgi', 'app.py')
application = wsgi.app
prediction_blueprint.py:
from flask import Blueprint, Flask, request
from keras_vggface import VGGFace, utils
from keras_vggface.utils import preprocess_input
from mtcnn import MTCNN
import cv2 as cv
import numpy as np
import json, requests
prediction_blueprint = Blueprint('prediction_blueprint', __name)
vggface = VGGFace(model='vgg16')
detector_obj = MTCNN()
@prediction_blueprint.route('/predict', methods=['POST'])
def index():
image = request.get_json().get('image')
face = extract_face('../uploads/' + image).astype('float32')
input_sample = np.expand_dims(face, axis=0)
samples = preprocess_input(input_sample)
pred = vggface.predict(samples)
output = utils.decode_predictions(pred)
founded_person = output[0][0][0].replace("b'", "").replace("'", "")
result = {
"success": True,
"message": {}
}
if founded_person:
celeb_name = get_best_title_wiki_page(founded_person)
if celeb_name:
result['message']['celeb_name'] = celeb_name
celeb_images = get_celeb_images(celeb_name)
if celeb_images:
result['message']['celeb_images'] = celeb_images
return result
else:
return {
"success": False,
"message": "Best Title Not Found!"
}
else:
return {
"success": False,
"message": "Not Found any things !",
}
def extract_face(address):
img = cv.imread(address)
rgb_img = cv.cvtColor(img, cv.COLOR_BGR2RGB)
face = detector_obj.detect_faces(rgb_img)[0]
x, y, w, h = face['box']
actual_face = img[y:y + h, x:x + w]
actual_face = cv.resize(actual_face, (224, 224))
return np.asarray(actual_face)
def get_best_title_wiki_page(celeb_name):
endpoint = "https://en.wikipedia.org/w/api.php"
parameters = {
"action": "query",
"list": "search",
"srsearch": celeb_name,
"format": "json",
"origin": "*"
}
best_title = None
try:
response = requests.get(endpoint, params=parameters)
data = json.loads(response.text)
best_title = data["query"]["search"][0]["title"]
except Exception as e:
print(e)
return best_title
def get_celeb_images(celeb_name):
endpoint = "https://en.wikipedia.org/w/api.php"
parameters = {
"action": "query",
"titles": celeb_name,
"prop": "images",
"iiprop": "url",
"format": "json",
"origin": "*"
}
try:
response = requests.get(endpoint, params=parameters)
data = json.loads(response.text)
page_id = list(data["query"]["pages"].keys())[0]
images = data["query"]["pages"][page_id]["images"]
filtered_images = [image for image in images if "file:" + celeb_name.lower() in image["title"].lower() or "file:" + celeb_name.lower().replace(" ", "") in image["title"].lower()]
image_urls = ["https://en.wikipedia.org/wiki/Special:Redirect/file/{}".format(image['title'].replace('File:', '')) for image in filtered_images]
cel_images = image_urls[0:4]
return cel_images
except Exception as e:
print("Getting Images API request Failed", e)
These are all things that I have written. All packages are installed properly, but I do not know which problem caused the We're sorry, but something went wrong message.
Of course, I have a warning like this in the log.log file, while I think it cannot cause the problem:
App 631448 output: /opt/passenger-5.3.7-13.el7.cloudlinux/src/helper-scripts/wsgi-loader.py:26: DeprecationWarning: the imp module is deprecated in favor of importlib; see the module's documentation for alternative uses
App 631448 output: import sys, os, io, re, imp, threading, signal, traceback, socket, select, struct, logging, errno
英文:
I'm a beginner in Flask and I have developed a face-detection application based on it. I had many problems when deploy project on a cPanel host and can solve that one by one. But now have another problem that always say me We're sorry, but something went wrong and I do not know what is problem because has no error in log file.
I have a python_files directory included three files like app.py , passenger_wsgi.py and prediction_blueprint.py and following are the things that are inside.
app.py file :
import os
from flask import Flask, render_template, request, redirect
from werkzeug.utils import secure_filename
from prediction_blueprint import prediction_blueprint
# from time import sleep
app = Flask(__name__, template_folder='../templates', static_folder='../static')
app.config['TEMPLATES_AUTO_RELOAD'] = True
app.register_blueprint(prediction_blueprint)
@app.route('/')
def index(): # put application's code here
return render_template('./index.html')
@app.route('/upload', methods=['POST'])
def upload():
file = request.files['file']
fn = secure_filename(file.filename)
# sleep(3)
file.save(os.path.join('../uploads', fn))
return {
"success": True,
"message": fn
}
if __name__ == '__main__':
app.run()
passenger_wsgi.py file:
import imp
import os
import sys
sys.path.insert(0, os.path.dirname(__file__))
wsgi = imp.load_source('wsgi', 'app.py')
application = wsgi.app
and prediction_blueprint.py
from flask import Blueprint, Flask, request
from keras_vggface import VGGFace, utils
from keras_vggface.utils import preprocess_input
from mtcnn import MTCNN
import cv2 as cv
import numpy as np
import json, requests
prediction_blueprint = Blueprint('prediction_blueprint', __name__)
vggface = VGGFace(model='vgg16')
detector_obj = MTCNN()
@prediction_blueprint.route('/predict', methods=['POST'])
def index():
image = request.get_json().get('image')
face = extract_face('../uploads/' + image).astype('float32')
input_sample = np.expand_dims(face, axis=0)
samples = preprocess_input(input_sample)
pred = vggface.predict(samples)
output = utils.decode_predictions(pred)
founded_person = output[0][0][0].replace("b'", "").replace("'", "")
result = {
"success": True,
"message": {}
}
if founded_person:
celeb_name = get_best_title_wiki_page(founded_person)
if celeb_name:
result['message']['celeb_name'] = celeb_name
celeb_images = get_celeb_images(celeb_name)
if celeb_images:
result['message']['celeb_images'] = celeb_images
return result
else:
return {
"success": False,
"message": "Best Title Not Found!"
}
else:
return {
"success": False,
"message": "Not Found any things !",
}
def extract_face(address):
img = cv.imread(address)
rgb_img = cv.cvtColor(img, cv.COLOR_BGR2RGB)
face = detector_obj.detect_faces(rgb_img)[0]
x, y, w, h = face['box']
actual_face = img[y:y + h, x:x + w] # This crop only section of image that contain person Face
actual_face = cv.resize(actual_face, (224, 224))
return np.asarray(actual_face)
def get_best_title_wiki_page(celeb_name):
endpoint = "https://en.wikipedia.org/w/api.php"
parameters = {
"action": "query",
"list": "search",
"srsearch": celeb_name,
"format": "json",
"origin": "*"
}
best_title = None
try:
response = requests.get(endpoint, params=parameters)
data = json.loads(response.text)
best_title = data["query"]["search"][0]["title"]
except Exception as e:
print(e)
return best_title
def get_celeb_images(celeb_name):
endpoint = "https://en.wikipedia.org/w/api.php"
parameters = {
"action": "query",
"titles": celeb_name,
"prop": "images",
"iiprop": "url",
"format": "json",
"origin": "*"
}
try:
response = requests.get(endpoint, params=parameters)
data = json.loads(response.text)
page_id = list(data["query"]["pages"].keys())[0]
images = data["query"]["pages"][page_id]["images"]
filtered_images = [image for image in images if
"file:" + celeb_name.lower() in image[
"title"].lower() or "file:" + celeb_name.lower().replace(" ", "") in image[
"title"].lower()]
image_urls = [f"https://en.wikipedia.org/wiki/Special:Redirect/file/{image['title'].replace('File:', '')}" for
image in filtered_images]
cel_images = image_urls[0:4]
return cel_images
except Exception as e:
print("Getting Images API request Failed", e)
these are all things that I have wrote , all packages are installed properly But I so not know which problem caused We're sorry, but something went wrong message?
Of course, I have a warning like this in log.log file while I think it cannot cause the problem :
App 631448 output: /opt/passenger-5.3.7-13.el7.cloudlinux/src/helper-scripts/wsgi-loader.py:26: DeprecationWarning: the imp module is deprecated in favour of importlib; see the module's documentation for alternative uses
App 631448 output: import sys, os, io, re, imp, threading, signal, traceback, socket, select, struct, logging, errno
答案1
得分: 2
在你的 **passenger_wsgi.py** 文件中:
替换:
`import imp` -> `from importlib.machinery import SourceFileLoader`
和
`imp.load_source('wsgi', 'app.py')` -> `SourceFileLoader('wsgi', 'app.py').load_module()`
在较新的 Python 版本(3.12?)中,`imp` 将不再存在,可以被 `importlib` 替代。但是他们已经提前警告你了,所以你会收到一个错误警告。
```python
from importlib.machinery import SourceFileLoader
import os
import sys
sys.path.insert(0, os.path.dirname(__file__))
wsgi = SourceFileLoader('wsgi', 'app.py').load_module()
application = wsgi.app
英文:
in your passenger_wsgi.py file:
replace:
import imp
-> from importlib.machinery import SourceFileLoader
and
imp.load_source('wsgi', 'app.py')
-> SourceFileLoader('wsgi', 'app.py').load_module()
imp
won't exist anymore in newer python versions (3.12?) and can be replaced by importlib
. But they warn you about it already beforehand that's why you get an error warning.
from importlib.machinery import SourceFileLoader
import os
import sys
sys.path.insert(0, os.path.dirname(__file__))
wsgi = SourceFileLoader('wsgi', 'app.py').load_module()
application = wsgi.app
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论