Membuat Computer Vision Virtual Button Calculator

Praktikum Computer Vision-Virtual Button Calculator


Computer vision adalah teknologi yang memungkinkan komputer bisa melihat serta mengenali objek di sekitarnya, selayaknya manusia. Cara kerjanya dengan kamera serta kecerdasan buatan atau AI (Artificial Intelligence). Jika AI memungkinkan komputer berpikir, maka computer vision memungkinkan teknologi komputer untuk melihat, mengamati dan memahami. Sebagai manusia, kita mengamati apa yang ada di sekeliling kita menggunakan saraf optik, retina, dan korteks visual. Dari pengamatan tersebut, kita bisa mendapatkan gambaran objek tertentu, mengukur jaraknya, menghitung kecepatan gerakannya, hingga menemukan kesalahan. Demikian pula dengan computer vision yang memungkinkan mesin bertenaga AI melatih diri untuk melakukan seperti yang dilakukan manusia. Mesin ini menggunakan kombinasi kamera, algoritma, dan data yang tersedia.

Bedanya, tidak seperti manusia, komputer tidak cepat lelah. Mesin yang didukung dengan computer vision bisa menganalisis ribuan aset produksi atau produk dalam hitungan menit. Ini memungkinkan pabrik mengotomatiskan pendeteksian kesalahan pada barang produksi yang tidak dapat dilihat oleh mata manusia. Hanya saja, dibutuhkan database besar untuk bisa menciptakan teknologi satu ini. Database besar ini dibutuhkan untuk mendapatkan setiap kemungkinan hasil akurat sesuai dengan perintah yang diberikan. Misalnya, komputer diberi tugas untuk mengidentifikasi kucing peliharaan yang sehat. Tentu perlu ribuan masukan seputar referensi visual kucing, indikator kesehatan, dan objek lainnya terkait kata kunci tersebut.

Di virtual button calculator ini terlebih dahulu kita harus menginstall library-library yang dibutuhkan, dengan cara buka anaconda prompt kemudian masukkan perintah berikut :

  • pip install cv2
  • pip install cvzone
  • pip install mediapipe

Kemudian pada VisualCodeStudio kita masukkan perintah atau source code . Perintah nya yaitu sebagai berikut :

import cv2
from cvzone.HandTrackingModule import HandDetector

class Button:
    def __init__(self, pos, width, height, value):
        self.pos = pos
        self.width = width
        self.height = height
        self.value = value
   
    def draw(self, img):
        cv2.rectangle(img, self.pos, (self.pos[0]+self.width, self.pos[1]+self.height),
                      (225, 225, 225), cv2.FILLED)
        cv2.rectangle(img, self.pos, (self.pos[0]+self.width, self.pos[1]+self.height),
                      (50, 50, 50), 3)
        cv2.putText(img, self.value, (self.pos[0]+25, self.pos[1]+46), cv2.FONT_HERSHEY_PLAIN,
                    2, (50, 50, 50), 2)
   
    def checkClick(self, x, y):
        if self.pos[0] < x < self.pos[0]+self.width and self.pos[1] < y < self.pos[1]+self.height :
            cv2.rectangle(img, self.pos, (self.pos[0]+self.width, self.pos[1]+self.height),
                          (255, 255, 255), cv2.FILLED)
            cv2.rectangle(img, self.pos, (self.pos[0]+self.width, self.pos[1]+self.height),
                          (50, 50, 50), 3)
            cv2.putText(img, self.value, (self.pos[0]+15, self.pos[1]+58), cv2.FONT_HERSHEY_PLAIN,
                        4, (0, 0, 0), 4)
            return True
        else:
            return False
           

cam = cv2.VideoCapture(0)
cam.set(3, 1280)
cam.set(4, 720)
detector = HandDetector(detectionCon=0.8, maxHands=1)

buttonListValues = [
    ['1', '2', '3', '+'],
    ['4', '5', '6', '-'],
    ['7', '8', '9', '/'],
    ['0', '.', '*', '=']
]

buttonList = []
for y in range(4):
    for x in range(4):
        xpos = x*80 + 320
        ypos = y*80 + 90
        buttonList.append(Button((xpos, ypos), 70, 70, buttonListValues[y][x]))

myEquation = ''
delayCounter = 0

while True:
    success, img = cam.read()
    img = cv2.flip(img, 1)
   
    hands, img = detector.findHands(img, flipType=False)
   
    cv2.rectangle(img, (320, 10), (320+310, 10+70),
                  (225, 225, 225), cv2.FILLED)
    cv2.rectangle(img, (320, 10), (320+310, 10+70),
                  (50, 50, 50), 3)
   
    for button in buttonList:
        button.draw(img)
   
    if hands:
        lmList = hands[0]['lmList']
        length, info, img = detector.findDistance(lmList[8][:2], lmList[12][:2], img)
        x, y = lmList[8][:2]
        if length < 50:
            for i, button in enumerate(buttonList):
                if button.checkClick(x, y) and delayCounter == 0:
                    myValue = buttonListValues[int(i/4)][int(i%4)]
                    if myValue == '=':
                        if len(myEquation) > 0:
                            if myEquation[0] != '+' and myEquation[0] != '-' and myEquation[0] != '*' and myEquation[0] != '/':
                                myEquation = str(eval(myEquation))
                    else:
                        myEquation += myValue
                    delayCounter = 1
 
    if delayCounter != 0:
        delayCounter += 1
        if delayCounter > 10:
            delayCounter = 0
   
    cv2.putText(img, myEquation, (320+10, 10+50), cv2.FONT_HERSHEY_PLAIN,
                3, (50, 50, 50), 3)
    cv2.imshow("Camera", img)
    key = cv2.waitKey(1)

    if key == ord('c') :
        myEquation = ''

Output YouTube : 




































Komentar