天天看點

opencv識别添加聖誕帽,配置到伺服器,使用Flask

實作步驟:

  1. 本地調試部分
  2. 上雲操作
  3. 伺服器的部署

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位址

上雲部分:

  1. 伺服器搭建
  2. opencv的配置

    1)下載下傳壓縮包,解壓

    2)配置安裝

    3)一些問題

    opencv識别添加聖誕帽,配置到伺服器,使用Flask
    opencv識别添加聖誕帽,配置到伺服器,使用Flask
    opencv識别添加聖誕帽,配置到伺服器,使用Flask
    【語句】sudo yum install libXext libSM libXrender
    opencv識别添加聖誕帽,配置到伺服器,使用Flask
    【原因】沒有找到源檔案,可能是檔案路徑設定錯誤
  3. 運作代碼

關于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

繼續閱讀