Nhiệm vụ của Trình tạo điểm ảnh khuôn mặt MediaPipe cho phép bạn phát hiện các điểm mốc trên khuôn mặt và biểu cảm khuôn mặt trong hình ảnh và video. Bạn có thể sử dụng nhiệm vụ này để xác định biểu cảm khuôn mặt của con người, áp dụng các bộ lọc và hiệu ứng khuôn mặt để tạo hình đại diện ảo. Nhiệm vụ này sử dụng các mô hình học máy (ML) có thể hoạt động với các hình ảnh đơn lẻ hoặc luồng hình ảnh. Tác vụ này sẽ đưa ra các điểm mốc khuôn mặt 3 chiều, hình dạng kết hợp điểm số (hệ số thể hiện biểu cảm khuôn mặt) để suy luận chi tiết về khuôn mặt bề mặt theo thời gian thực và ma trận biến đổi để thực hiện cần biến đổi để kết xuất hiệu ứng.
Những hướng dẫn này chỉ cho bạn cách sử dụng tính năng Điểm mốc khuôn mặt dành cho web và JavaScript của chúng tôi. Để biết thêm thông tin về tính năng, kiểu máy và cấu hình các tuỳ chọn của việc cần làm này, hãy xem phần Tổng quan.
Ví dụ về mã
Mã mẫu dành cho tính năng Điểm mốc khuôn mặt cung cấp cách triển khai hoàn chỉnh tính năng này trong JavaScript để bạn tham khảo. Mã này giúp bạn kiểm thử công việc này và bắt đầu xây dựng ứng dụng tạo điểm mốc khuôn mặt của riêng bạn. Bạn có thể xem, chạy và chỉnh sửa mã ví dụ của Trình xác định khuôn mặt chỉ bằng trình duyệt web.
Thiết lập
Phần này mô tả các bước chính để thiết lập môi trường phát triển dành riêng cho việc sử dụng Công cụ đánh dấu khuôn mặt. Để biết thông tin chung về thiết lập môi trường phát triển web và JavaScript, bao gồm yêu cầu về phiên bản nền tảng, hãy xem Hướng dẫn thiết lập cho web.
Gói JavaScript
Bạn có thể dùng mã Điểm mốc khuôn mặt trên @mediapipe/tasks-vision
của MediaPipe
Gói Trạng thái đã hiển thị Bạn có thể
tìm và tải các thư viện này xuống bằng cách làm theo hướng dẫn trong nền tảng
Hướng dẫn thiết lập.
Bạn có thể cài đặt các gói bắt buộc thông qua kháng nghị bằng lệnh sau:
npm install @mediapipe/tasks-vision
Nếu bạn muốn nhập mã tác vụ qua mạng phân phối nội dung (CDN) hãy thêm mã sau vào <head> trong tệp HTML:
<!-- You can replace JSDeliver with another CDN if you prefer to -->
<head>
<script src="https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision/vision_bundle.js"
crossorigin="anonymous"></script>
</head>
Mẫu
Nhiệm vụ Trình xác định khuôn mặt MediaPipe cần có một mô hình đã qua đào tạo tương thích với tính năng này công việc. Để biết thêm thông tin về các mô hình đã qua đào tạo dùng được cho tính năng Đánh dấu khuôn mặt, hãy xem tổng quan về nhiệm vụ phần Mô hình.
Chọn và tải mô hình xuống rồi lưu trữ mô hình đó trong thư mục dự án:
<dev-project-root>/app/shared/models/
Tạo việc cần làm
Sử dụng một trong các chức năng createFrom...()
của Trình xác định khuôn mặt để
chuẩn bị tác vụ để chạy các dự đoán. Sử dụng createFromModelPath()
có đường dẫn tương đối hoặc tuyệt đối đến tệp mô hình đã huấn luyện.
Nếu mô hình đã được tải vào bộ nhớ, bạn có thể sử dụng phương thức
createFromModelBuffer()
.
Ví dụ về mã bên dưới minh hoạ việc sử dụng hàm createFromOptions()
để
thiết lập việc cần làm. Hàm createFromOptions
cho phép bạn tuỳ chỉnh
Máy đánh dấu khuôn mặt với các lựa chọn cấu hình. Để biết thêm thông tin, hãy xem
Tuỳ chọn cấu hình.
Mã sau đây minh hoạ cách tạo và định cấu hình tác vụ bằng công cụ tuỳ chỉnh tùy chọn:
const vision = await FilesetResolver.forVisionTasks(
// path/to/wasm/root
"https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision@latest/wasm"
);
const faceLandmarker = await faceLandmarker.createFromOptions(
vision,
{
baseOptions: {
modelAssetPath: "path/to/model"
},
runningMode: runningMode
});
Các lựa chọn về cấu hình
Tác vụ này có các lựa chọn cấu hình sau cho Web và JavaScript ứng dụng:
Tên lựa chọn | Mô tả | Khoảng giá trị | Giá trị mặc định |
---|---|---|---|
running_mode |
Thiết lập chế độ chạy cho tác vụ. Có hai
chế độ: HÌNH ẢNH: Chế độ cho đầu vào một hình ảnh. VIDEO: Chế độ cho khung đã giải mã của hoặc sự kiện phát trực tiếp dữ liệu đầu vào, chẳng hạn như từ camera. |
{IMAGE, VIDEO } |
IMAGE |
numFaces |
Số lượng khuôn mặt tối đa mà ứng dụng có thể phát hiện
FaceLandmarker . Tính năng làm mượt chỉ được áp dụng khi
num_faces được đặt thành 1.
|
Integer > 0 |
1 |
minFaceDetectionConfidence |
Điểm tin cậy tối thiểu để phát hiện khuôn mặt được coi là thành công. | Float [0.0,1.0] |
0.5 |
minFacePresenceConfidence |
Điểm số tin cậy tối thiểu cho sự hiện diện của khuôn mặt điểm số trong tính năng phát hiện mốc khuôn mặt. | Float [0.0,1.0] |
0.5 |
minTrackingConfidence |
Điểm tin cậy tối thiểu cho tính năng theo dõi khuôn mặt để được coi là thành công. | Float [0.0,1.0] |
0.5 |
outputFaceBlendshapes |
Liệu Trình xác định khuôn mặt có xuất ra các hình dạng khuôn mặt kết hợp không. Các hình dạng khuôn mặt được dùng để kết xuất mô hình khuôn mặt 3D. | Boolean |
False |
outputFacialTransformationMatrixes |
FaceLandmarker xuất ra thông tin về khuôn mặt ma trận biến đổi. FaceLandmarker sử dụng ma trận để chuyển đổi các điểm mốc trên khuôn mặt từ mẫu khuôn mặt chuẩn sang khuôn mặt được phát hiện, để người dùng có thể áp dụng hiệu ứng cho các địa danh được phát hiện. | Boolean |
False |
Chuẩn bị dữ liệu
Trình tạo mốc khuôn mặt có thể phát hiện các khuôn mặt trong hình ảnh ở bất kỳ định dạng nào được hỗ trợ bởi trình duyệt chính. Tác vụ này cũng xử lý trước xử lý dữ liệu đầu vào, bao gồm đổi kích thước, xoay và chuẩn hoá giá trị. Đối với những khuôn mặt gây ấn tượng trong video: bạn có thể dùng API để xử lý nhanh từng khung hình bằng cách dùng dấu thời gian của khung hình để xác định thời điểm các khuôn mặt xuất hiện trong video.
Chạy tác vụ
Tính năng Xác định khuôn mặt sử dụng detect()
(có chế độ chạy IMAGE
) và
Các phương thức detectForVideo()
(với chế độ đang chạy VIDEO
) để kích hoạt
suy luận. Tác vụ này sẽ xử lý dữ liệu, cố gắng di chuyển các mặt của điểm mốc, và
sau đó báo cáo kết quả.
Các lệnh gọi đến phương thức detect()
và detectForVideo()
của Trình xác định khuôn mặt sẽ chạy
một cách đồng bộ và chặn luồng giao diện người dùng. Nếu bạn phát hiện thấy khuôn mặt
trong khung hình video từ camera của thiết bị, mỗi lần phát hiện chặn
chuỗi. Bạn có thể ngăn chặn điều này bằng cách triển khai trình thực thi web để chạy detect()
và phương thức detectForVideo()
trên một chuỗi khác.
Mã sau đây minh hoạ cách thực thi quá trình xử lý bằng mô hình tác vụ:
Bài đăng có hình ảnh
const image = document.getElementById("image") as HTMLImageElement; const faceLandmarkerResult = faceLandmarker.detect(image);
Video
await faceLandmarker.setOptions({ runningMode: "VIDEO" }); let lastVideoTime = -1; function renderLoop(): void { const video = document.getElementById("video"); if (video.currentTime !== lastVideoTime) { const faceLandmarkerResult = faceLandmarker.detectForVideo(video); processResults(detections); lastVideoTime = video.currentTime; } requestAnimationFrame(() => { renderLoop(); }); }
Để triển khai hoàn chỉnh hơn quá trình chạy tác vụ Trình xác định khuôn mặt, hãy xem mã ví dụ.
Xử lý và hiện kết quả
Trình xác định khuôn mặt trả về một đối tượng kết quả cho mỗi lần phát hiện chạy. Đối tượng kết quả chứa một lưới khuôn mặt cho mỗi khuôn mặt được phát hiện, với toạ độ cho từng mốc khuôn mặt. Đối tượng kết quả cũng có thể tuỳ ý chứa các hình dạng hỗn hợp, biểu thị biểu cảm khuôn mặt và hình ảnh ma trận biến đổi để áp dụng hiệu ứng khuôn mặt cho các địa danh được phát hiện.
Sau đây là ví dụ về dữ liệu đầu ra của tác vụ này:
FaceLandmarkerResult:
face_landmarks:
NormalizedLandmark #0:
x: 0.5971359014511108
y: 0.485361784696579
z: -0.038440968841314316
NormalizedLandmark #1:
x: 0.3302789330482483
y: 0.29289937019348145
z: -0.09489090740680695
... (478 landmarks for each face)
face_blendshapes:
browDownLeft: 0.8296722769737244
browDownRight: 0.8096957206726074
browInnerUp: 0.00035583582939580083
browOuterUpLeft: 0.00035752105759456754
... (52 blendshapes for each face)
facial_transformation_matrixes:
[9.99158978e-01, -1.23036895e-02, 3.91213447e-02, -3.70770246e-01]
[1.66496094e-02, 9.93480563e-01, -1.12779640e-01, 2.27719707e+01]
...
Hình ảnh sau đây minh hoạ kết quả của tác vụ:
Mã ví dụ của Trình xác định khuôn mặt minh hoạ cách hiển thị kết quả được trả về từ tác vụ, hãy xem mã ví dụ