實作步驟:
- 本地調試部分
- 上雲操作
- 伺服器的部署
opencv部分:參考
識别部分的函數封裝:
參數:
待處理圖檔:personImg
帽子的圖檔:hatPath
分類器檔案:haarcascade_frontalface_default.xml
def Christmas_hat(personImg, hatPath='./hat.png',
cv2_Classifier_path='./haarcascades/haarcascade_frontalface_default.xml'):
face_haar = cv2.CascadeClassifier(cv2_Classifier_path)
faces = face_haar.detectMultiScale(personImg, 1.3, 3)
personImg = Image.fromarray(cv2.cvtColor(personImg, cv2.COLOR_BGR2RGB))
personImg = personImg.convert('RGBA')
hatImg = Image.open(hatPath)
hatImg = hatImg.convert('RGBA')
for face_x, face_y, face_w, face_h in faces:
face_x -= face_w // 2
face_y += face_h // 2
face_w *= 2
face_h *= 2
hatImg = hatImg.resize((face_w, face_h))
bg = (face_x, face_y - face_h + 100, face_x + face_w, face_y + 100)
personImg.paste(hatImg, bg, mask=hatImg)
return cv2.cvtColor(np.asarray(personImg), cv2.COLOR_RGB2BGR)
簡單的html(直接放在代碼中):
html = '''
<!DOCTYPE html>
<title>Upload File</title>
<h1>圖檔上傳</h1>
<form method=post enctype=multipart/form-data>
<input type=file name=file>
<input type=submit value=上傳>
</form>
'''
flask部分:
步驟:
1.接收request得到檔案名
2.檢查檔案名的安全性
3.儲存原圖檔
4.opecv讀取圖檔,傳入Christmas_hat()函數
5.得到處理後的圖檔,顯示并且儲存;
@app.route('/detection_api', methods=['GET', 'POST'])
def detection_api():
if request.method == 'POST':
file = request.files['file']
if file and allowed_file(file.filename):
filename = secure_filename(file.filename)
file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
# 圖像處理部分
img = cv2.imread(os.path.join(app.config['UPLOAD_FOLDER'], filename))
img_hou = Christmas_hat(img)
cv2.imwrite(app.config['UPLOAD_FOLDER'] + "/" + "after_" + filename, img_hou)
file_url = url_for('uploaded_file', filename=str("after_" + filename))
return html + '<br><img src=' + file_url + '>'
return html
完整代碼:github位址
上雲部分:
- 伺服器搭建
-
opencv的配置
1)下載下傳壓縮包,解壓
2)配置安裝
3)一些問題
【語句】sudo yum install libXext libSM libXrender 【原因】沒有找到源檔案,可能是檔案路徑設定錯誤 - 運作代碼
關于gunicorn:
–運作:gunicorn -w 4 -b 0.0.0.0:8080 all:app
–檢視運作程序: ps ax|grep gunicorn
–停止gunicorn: pkill gunicorn gunicorn –preload -w 4 -b 0.0.0.0:8080 all:app
關于nginx:
–start nginx : 啟動nginx
–nginx -s reload :修改配置後重新加載生效
–nginx -s reopen :重新打開日志檔案
–nginx -t -c /path/to/nginx.conf 測試nginx配置檔案是否正确
關閉nginx:
–nginx -s stop :快速停止nginx
–nginx -s quit :完整有序的停止nginx