flask opencv demo

Apa itu OpenCV? Wikipedia menyatakan bahwa OpenCV (Open Source Computer Vision Library) adalah sebuah pustaka perangkat lunak yang ditujukan untuk pengolahan citra dinamis secara real-time. OpenCV dapat melakukan tugas-tugas seperti object detection, shape analysis, face detection, face recognition dan lain sebagainya.

Apa itu Flask? Flask adalah sebuah framework disebut juga sebagai microframework berbahasa pemrograman Python yang memungkinkan kita untuk mengembangkan aplikasi berbasis web dengan mudah.

Di tutorial kali ini saya akan menggunakan Pycharm IDE untuk membuat project aplikasi face detection sederhana yang berjalan di web browser. Dalam Pycharm IDE ini nantinya saya akan menginstall OpenCV dan Flask. Pycharm yang saya gunakan dalam tutorial ini adalah versi 2022.1 dalam Operating System Windows 10. Bagi teman-teman yang mau mempraktikkan tutorial pembuatan aplikasi ini, silahkan install Pycharm terlebih dahulu. Saya sudah buatkan panduan instalasinya di tutorial "Cara Instal Pycharm di Windows 10".

Syarat lain untuk dapat mempraktikkan tutorial ini PC teman-teman harus dilengkapi webcam !

1. Create Project

Jika Pycharm IDE sudah terinstal, silahkan buka Pycharm untuk memulai project baru kita. Pada textbox Location ketikkan nama project yang akan sekaligus membuat folder kerja baru sebagai folder project face detection ini. Project ini saya beri nama FlaskOpenCV_FaceDetection, untuk Create main.py tidak saya check dan untuk pengaturan environment-nya saya atur sesuai defaultnya saja. Kemudian klik tombol Create.

create_project_pycharm

Tampilan project FlaskOpenCV_FaceDetection di Pycharm.

create_project_pycharm

2. Install Package

Pilih Setting pada menu File untuk menampilkan jendela Setting. Kemudian klik menu Python Interpreter.

setting
setting

Berikutnya saya akan menambahkan package OpenCV dan Flask ke dalam project. Caranya dengan mengklik icon plus pada halaman menu Python Interpreter.

2.1 Install opencv-python

install opencv python

Proses instalasi package python-opencv

install opencv python

Proses instalasi selesai

install opencv python

2.2 Install Flask

Lakukan langkah yang sama seperti pada install package python-opencv.

install flask

Berikut hasil akhir dari instalasi package OpenCV Python dan Flask. Klik tombol Ok untuk menutup jendela Setting dan kembali ke tampilan menu utama Project.

install flask

3. Membuat Folder Untuk File-file Pendukung Project

Berikutnya saya akan membuat 3 folder baru di dalam folder root Project, yaitu folder resources, static dan templates. Klik kanan pada folder FlaskOpenCV_FaceDetection dan arahkan mouse ke New Directory.

new directory

Akan tampil pop up New Directory untuk mengisi nama directory. Isikan resources pada text box kemudian Enter.

new directory

Lakukan hal yang sama untuk membuat directory static dan templates, sehingga susunan folder-folder tersebut menjadi seperti berikut:

directory resources static templates

4. Download File-file Pendukung

File-file pendukung project ini ada 2 file yaitu haarcascade_frontalface_default.xml dan static_file.zip. File haarcascade_frontalface_default.xml merupakan file classifier untuk face detection dan file static_file.zip berisi file css, javascript dan image untuk menghias tampilan halaman web.

Berikut link downloadnya:

  1. haarcascade_frontalface_default.xml
  2. static_files.zip

Setelah berhasil didownload, copy file haarcascade_frontalface_default.xml kemudian paste ke dalam folder resources di pycharm. Extract file static_files.zip, copy 3 folder di dalamnya yaitu folder css, img dan js ke dalam folder static di pycharm.

download folder

Folder resources dan static di Pycharm

resources and static folder

5. Mainkan Kodingannya

5.1 index.html

Create file index.html di dalam directory templates.

index html

Pada pop up text box ketikkan index, kemudian Enter.

index html
index html

Dobel klik file index.html yang baru saja kita buat untuk kita lakukan pengkodingan. Copy paste script kode di bawah ini:

<!doctype html>
<html lang="en">
<head>
    <!-- Required meta tags -->
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

    <link rel="stylesheet" href="{{ url_for('static', filename='css/bootstrap.min.css') }}" type="text/css">
    <link rel="stylesheet" href="{{ url_for('static', filename='css/font-awesome.min.css') }}" type="text/css">
    <link rel="stylesheet" href="{{ url_for('static', filename='css/style.css') }}" type="text/css">

    <script src="{{ url_for('static', filename='js/jquery.min.js') }}"></script>
    <script src="{{ url_for('static', filename='js/bootstrap.min.js') }}"></script>

    <title>Flask OpenCV Face Detection</title>
</head>
<body>

<nav class="navbar navbar-expand-lg py-2 navbar-dark bg-dark shadow-sm">
    <div class="container">
        <a href="#" class="navbar-brand">
          <!-- Logo Image -->
          <img src="{{ url_for('static', filename='img/logo.png') }}" width="45" alt="" class="d-inline-block align-middle mr-2">
          <!-- Logo Text -->
          <span class="font-weight-bold">Flask OpenCV Face Detection</span>
        </a>
    </div>
</nav>

<section class="py-1">
    <div class="row">
        <div class="col-lg-8  offset-lg-2">
            <br>
            <img src="{{ url_for('video_feed') }}" width="100%" class="img-thumbnail">
        </div>
    </div>
</section>

</body>
</html>

            

5.2 app.py

Create file python dengan nama app.py di root directory.

index html

Pada pop up text box ketikkan app, kemudian Enter.

index html
index html

Dobel klik file app.py yang baru saja kita buat untuk kita lakukan pengkodingan. Copy paste script kode di bawah ini:

from flask import Flask, render_template, Response
import cv2


face_cascade = cv2.CascadeClassifier("C:/Users/Erik/PycharmProjects/FlaskOpenCV_FaceDetection/resources/haarcascade_frontalface_default.xml")

app = Flask(__name__)

def faceDetection():  # generate frame by frame from camera
    cap = cv2.VideoCapture(0)  # use 0 for web camera

    while True:
        success, img = cap.read()

        gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

        faces = face_cascade.detectMultiScale(gray,1.1, 4)

        for (x, y, w, h) in faces:
            cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2)

        frame = cv2.imencode('.jpg', img)[1].tobytes()
        yield (b'--frame\r\n'b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n')

        key = cv2.waitKey(1)
        if key == 27:
            break


@app.route('/video_feed')
def video_feed():
    #Video streaming route. Put this in the src attribute of an img tag
    return Response(faceDetection(), mimetype='multipart/x-mixed-replace; boundary=frame')


@app.route('/')
def index():
    """Video streaming home page."""
    return render_template('index.html')

if __name__ == '__main__':
    # app.run(debug=True)
    app.run(host='127.0.0.1', port=5000, debug=True)

            

6. Running Program

Setelah selesai mengikuti langkah-langkah di atas, kini saatnya menjalankan aplikasi face detection kita. Klik kanan pada file app.py kemudian pilih Debug App (boleh juga pilih Run App).

debug app

Tunggu beberapa saat sampai tampil jendela Console di bagian bawah jendela Pycharm.

debug app

Klik URL yang tampil di jendela Console : http://127.0.0.1:5000

Jika tidak ada error maka Face Detection app akan running id browser.

run app in browser

Video Demo dan Instruksi