Hướng dẫn how to make virtual keyboard in python - cách làm bàn phím ảo trong python

Bài viết này đã được xuất bản như một phần của & NBSP; Data Science Blogathon

Giới thiệu

OpenCV là thư viện phổ biến nhất cho nhiệm vụ tầm nhìn máy tính, nó là một thư viện nguồn mở đa nền tảng để học máy, xử lý hình ảnh, v.v. Sử dụng các ứng dụng tầm nhìn máy tính thời gian thực nào được phát triển.

CVZone là một gói tầm nhìn máy tính, trong đó nó sử dụng OpenCV và Medias cốt lõi của nó giúp chúng ta dễ dàng chạy như theo dõi tay, phát hiện khuôn mặt, phát hiện mốc khuôn mặt, ước tính tư thế, v.v., và xử lý hình ảnh và các ứng dụng liên quan đến tầm nhìn máy tính khác. Kiểm tra ở đây để biết thêm thông tin.

Thực hiện bàn phím ảo bằng OpenCV

Hãy để chúng tôi tạo một bàn phím ảo.

Đầu tiên, chúng ta hãy cài đặt các mô -đun cần thiết.

---> pip install numpy

---> pip install opencv-python

---> pip install cvzone

---> pip install pynput

Nhập thư viện cho bàn phím ảo bằng OpenCV

Bây giờ, hãy để nhập khẩu các mô -đun cần thiết

import cv2
import cvzone
from cvzone.HandTrackingModule import HandDetector
from time import sleep
import numpy as np
from pynput.keyboard import Controller

Ở đây chúng tôi đang nhập mô -đun Handdetector từ cvzone.HandTrackingModule và sau đó để làm cho bàn phím ảo hoạt động, chúng tôi cần nhập bộ điều khiển từ pynput.keyboard.

cap = cv2.VideoCapture[0, cv2.CAP_DSHOW]
cap.set[3, 1280]
cap.set[4, 720]

Bây giờ, hãy để Lừa lấy đầu vào thời gian thực từ CV2.Videocapture

detector = HandDetector[detectionCon=0.8]
keyboard_keys = [["Q", "W", "E", "R", "T", "Y", "U", "I", "O", "P"],
                  ["A", "S", "D", "F", "G", "H", "J", "K", "L", ";"],
                  ["Z", "X", "C", "V", "B", "N", "M", ",", ".", "/"]]
final_text = ""

Chúng tôi khởi tạo bộ xử lý với độ tin cậy phát hiện là 0,8 và gán nó cho máy dò. Sau đó, chúng tôi tạo một mảng danh sách theo bố cục của bàn phím của chúng tôi và xác định một chuỗi trống để lưu trữ các khóa được đánh máy.

Xác định chức năng vẽ

keyboard = Controller[]
def draw[img, buttonList]:
    for button in buttonList:
        x, y = button.pos
        w, h = button.size
        cvzone.cornerRect[img, [button.pos[0], button.pos[1],
                                                   button.size[0],button.size[0]], 20 ,rt=0]
        cv2.rectangle[img, button.pos, [int[x + w], int[y + h]], [255, 144, 30], cv2.FILLED]
        cv2.putText[img, button.text, [x + 20, y + 65],
                    cv2.FONT_HERSHEY_PLAIN, 4, [0, 0, 0], 4]
    return img

Khởi tạo bộ điều khiển bàn phím và xác định một hàm với Tên Draw [] và nó có hai đối số là hình ảnh và danh sách nút và trả về hình ảnh. Ở đây bên trong hàm draw [], chúng tôi đang sử dụng hàm cvzone, cornerct để vẽ các cạnh hình chữ nhật ở góc của mỗi phím. Đó là để làm cho bố cục bàn phím của chúng tôi trông đẹp hơn. Nó sẽ trông giống như những hình ảnh dưới đây.

Bạn cũng có thể thử thay đổi màu sắc khác nhau.

class Button[]:
    def __init__[self, pos, text, size=[85, 85]]:
        self.pos = pos
        self.size = size
        self.text = text

Sau đó, chúng tôi xác định một lớp được gọi là nút [] và chúng tôi cung cấp vị trí, văn bản và kích thước làm đầu vào để chúng tôi có thể sắp xếp các phím bàn phím theo thứ tự được xác định rõ.

buttonList = []
# mybutton = Button[[100, 100], "Q"]
for k in range[len[keyboard_keys]]:
    for x, key in enumerate[keyboard_keys[k]]:
        buttonList.append[Button[[100 * x + 25, 100 * k + 50], key]]

Vòng lặp ở trên sẽ lặp qua các phím bàn phím và các đối tượng nút nơi chúng tôi đưa ra vị trí và văn bản làm đầu vào được thêm vào trong danh sách danh sách được gọi là danh sách. Sau đó, chúng ta có thể vượt qua danh sách này để vẽ chức năng để vẽ trên khung thời gian thực của chúng ta.

Chương trình chính cho bàn phím ảo sử dụng OpenCV

Đây là phần quan trọng.

while True:
    success, img = cap.read[]
    img = detector.findHands[img]
    lmList, bboxInfo = detector.findPosition[img]
    img = draw[img, buttonList]  # change the draw funtion to transparent_layout for transparent keys
    if lmList:
        for button in buttonList:
            x, y = button.pos
            w, h = button.size

if x < lmList[8][0]

Bài Viết Liên Quan

Chủ Đề