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.

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

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ên trong vòng lặp trong khi chức năng chính diễn ra, trước tiên chúng ta đọc các khung đầu vào thời gian thực và lưu trữ nó trong một biến có tên IMG. Sau đó, chúng tôi chuyển hình ảnh đó cho máy dò.findhands () để tìm bàn tay trong khung. Sau đó, trong hình ảnh đó, chúng ta cần tìm vị trí và thông tin hộp giới hạn của bàn tay được phát hiện đó.

Ở đây chúng ta có thể tìm thấy khoảng cách giữa điểm trên cùng của ngón trỏ và ngón giữa của chúng ta, nếu khoảng cách giữa hai điểm nhỏ hơn một ngưỡng nhất định, thì chúng ta có thể nhập chữ cái mà chúng ta đang chỉ ra. Khi chúng tôi nhận được vị trí thì chúng tôi lặp qua toàn bộ danh sách vị trí. Từ danh sách đó, chúng tôi tìm thấy vị trí nút và kích thước nút và sau đó chúng tôi vẽ nó trên khung theo cách được xác định rõ.

Hướng dẫn how to make virtual keyboard in python - cách làm bàn phím ảo trong python
Hình 1: Mô hình Landmark Tay & NBSP; & NBSP;

Sau đó, chúng ta cần tìm khoảng cách giữa điểm trên cùng của ngón trỏ và ngón giữa. Trong hình trên, bạn có thể thấy các điểm cao nhất mà chúng tôi yêu cầu là điểm 8 và điểm 12. Do đó chúng ta cần vượt qua 8, 12 trong một hàm tìm khoảng cách để có được khoảng cách giữa chúng. Trong mã trên, bạn có thể thấy máy dò.finddistance () và ở đó chúng tôi đã vượt qua 8, 12 và hình ảnh để tìm khoảng cách và chúng tôi đặt cờ vẽ thành sai để chúng tôi không cần bất kỳ dòng nào giữa hai điểm.

Nếu khoảng cách giữa các điểm rất ít, chúng tôi sẽ sử dụng chức năng Press () & NBSP; để nhấn các phím. Trong mã trên Bàn phím.Press () và chúng tôi đang chuyển nút.Text để hiển thị phím nhấn đó. Và cuối cùng, chúng tôi vẽ một hộp hình chữ nhật nhỏ màu trắng ngay bên dưới bố cục bàn phím của chúng tôi để hiển thị phím được nhấn.

Khi bạn thực thi toàn bộ mã, nó trông giống như thế này.

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

Sau khi bạn mang ngón trỏ và ngón giữa gần nhau trên đầu một chữ cái cụ thể, bạn có thể nhập chữ cái đó.

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

Nếu bạn cần bố cục bàn phím để được tùy chỉnh hơn, chúng ta có thể làm cho bố cục bàn phím trong suốt. Chúng ta chỉ cần thêm hàm bố cục trong suốt và thay thế hàm draw () bằng hàm trong suốt_layout ().

Hãy để chúng tôi xác định hàm inparent_layout (). Dưới đây là hàm, nó có cùng đầu vào với hàm rút (). Ở đây, chúng tôi chỉ định hàm Numpy từ & nbsp; zero_like () cho một biến gọi là imgnew và thực hiện thao tác mong muốn trên đó, như có hình chữ nhật góc, tạo hộp hình chữ nhật cho mỗi phím và đặt văn bản vào hộp. Sau đó, chúng tôi sao chép hình ảnh đó vào một biến mới và tạo một mặt nạ của IMGNEW và chúng tôi sử dụng hàm add weight () OpenCV () để đặt mặt nạ lên trên hình ảnh thực tế. Do đó, điều này làm cho bố cục bàn phím trong suốt.

Tùy chỉnh bàn phím

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

out = img.copy () alpaha = 0,5 mặt nạ = imgnew.aSype (bool) in (mặt nạ.
alpaha = 0.5
mask = imgNew.astype(bool)
print(mask.shape)
out[mask] = cv2.addWeighted(img, alpaha, imgNew, 1-alpaha, 0)[mask] return out

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

Khi bạn thay thế hàm DRAW () bên trong trong khi vòng lặp bằng hàm trong suốt_layout (), nó sẽ trông như thế này.(Hình ảnh dưới đây)

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

Toàn bộ mã cho bàn phím ảo bằng opencv

Dưới đây là toàn bộ mã

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

Sự kết luận

Đây là việc triển khai bàn phím ảo, nếu bạn muốn đưa nó đến bước tiếp theo, bạn cũng có thể tất cả các âm thanh phím và sau đó chúng tôi cũng có thể tạo bố cục bàn phím di chuyển trong khung.

Hy vọng bạn thích nó.

Tài liệu tham khảo

Hình 1: https://google.github.io/mediapipe/solutions/hands.html

Linkedin của tôi

Cảm ơn

Các phương tiện truyền thông được hiển thị trong bài viết này không thuộc sở hữu của Analytics Vidhya và được sử dụng theo quyết định của tác giả.