Tôi đã dùng AI và Computer Vision để thay thế dụng cụ tính điểm bắn súng bằng chiếc iPhone
Một kỹ sư iOS đã phát triển ứng dụng sử dụng Computer Vision và mô hình YOLOv8 để tự động tính điểm cho các mục tiêu bắn súng, thay thế cho phương pháp thủ công dùng nắp đồng thau. Dự án không chỉ giúp giải quyết vấn đề cá nhân mà còn là một ví dụ thú vị về việc áp dụng AI vào đời thực, kết hợp giữa xử lý hình ảnh truyền thống và học máy hiện đại trên thiết bị di động.

Hành trình này bắt đầu bằng một mong muốn đơn giản: tôi muốn tự tay nấu món thịt nai. Điều này dẫn đến việc tôi phải học bắn súng, và học bắn súng lại dẫn đến việc phải theo dõi tiến độ của mình. Cuối cùng, tôi đã chuyển một bài báo khoa học về OpenCV từ năm 2012 và huấn luyện một mô hình thị giác máy tính hiện đại, khiến cho bữa tối của tôi bị hoãn lại khá lâu so với dự kiến.
Trong nhiều tháng, tôi đã dành tối thứ tư của mình tại một đường hầm kim loại nằm ngay bên ngoài Edinburgh. Tôi mặc một chiếc áo khoác trông rất kỳ cục và khó chịu, nằm trên sàn nhà để đếm nhịp thở, rồi đi dọc theo bãi bắn, khom lưng dưới những thanh dầm trần. Sàn nhà được sơn chữ "CÚI" (DUCK) màu trắng mỗi năm mét, các thanh dầm cũng dán poster cảnh báo, nhưng thỉnh thoảng tôi vẫn đập đầu vào chúng vì quá bận rộn kiểm tra thẻ điểm.
Nếu bạn không may, một phát súng sẽ rơi ngay gần đường ranh giới của vòng tròn điểm số và bạn sẽ cần sự trợ giúp. Bạn phải đi đến một khay bánh sausage rolls của Greggs, tìm một chiếc hộp gỗ chứa các nắp đồng thau (brass plugs) đủ kích cỡ, chọn cái đúng kích thước, đẩy cẩn thận vào lỗ đạn (lý tưởng nhất là chỉ đẩy một lần để tránh rách giấy), và vị trí của nó chính là điểm số của bạn.
Viên đạn đẩy giấy vào trong, vì vậy ngay cả khi đường ranh giới không bị chạm vào, miễn là mép giấy lồi ra ngoài vòng ngoài cùng, bạn sẽ nhận điểm số thấp hơn. Phần bắn súng thì rất thú vị, nhưng nghi thức tính điểm - đập đầu, đẩy nắp - phải chấm dứt.
Dụng cụ tính điểm thủ công bằng nắp đồng thau
Thử thách với "Không gian Âm"
Là một kỹ sư iOS, tôi bắt đầu với các công cụ có sẵn của Apple: Vision framework. Nó có sẵn các bộ phát hiện đối tượng, phân vùng người, nhận dạng văn bản và thậm chí là quét mã vạch. Tuy nhiên, nó liên tục gán nhãn các phần ngẫu nhiên của hình ảnh là lỗ đạn - từ chấm đen ở giữa mục tiêu đến các mảnh vỡ của một trong những vòng điểm số.
Vấn đề nằm ở chỗ lỗ đạn là một "không gian âm" (negative space). Các bộ phát hiện đối tượng được huấn luyện để tìm kiếm vật thể nên không dễ dàng gì để dùng chúng tìm kiếm thứ vốn có ở đó rồi bị mất đi.
Vision framework phát hiện quá nhiều điểm nhiễu
Tôi đã thử một vài cách rõ ràng khác: chuyển sang thang độ xám, đảo ngược hình ảnh, thêm và loại bỏ nhiễu. Nhưng ngay cả khi mọi thứ khác hoạt động, những phát súng rơi vào đường ranh giới lại bị vỡ thành các mảnh quá nhỏ để không thể đăng ký được.
Một cách tiếp cận tốt hơn là coi mục tiêu bắn là một đối tượng có hình học đã biết: tìm cấu trúc vòng tròn trước, sau đó tìm các lỗ bên trong nó. Tôi chấp nhận rằng mình sẽ không phát minh lại chiếc xe hơi lần này và bắt đầu tìm kiếm các giải pháp thay thế.
Kết hợp OpenCV và YOLOv8
Tôi tìm thấy một bài báo năm 2012 của Đại học Công nghệ Warsaw hứa hẹn độ chính xác 99% trong việc phát hiện lỗ đạn. Phương pháp này được tối ưu hóa cho hình ảnh độ phân giải thấp nhưng yêu cầu mục tiêu phẳng và góc máy thấp. Tôi đã tái tạo lại bài báo từng bước một: xóa các đường vòng tròn, dùng thuật toán flood-fill để tìm hình dạng lỗ, chạy bộ phát hiện cạnh Prewitt và khớp vòng tròn với biến đổi Hough.
Ba bước đầu tiên hoạt động tốt, nhưng bước cuối cùng gặp vấn đề. Thẻ NSRA in điểm số tại các điểm chính - chữ "9" ở phía Bắc, Đông, Nam và Tây của vòng 9 - và biến đổi Hough cũng khớp vòng tròn vào những chữ số này.
Cuối cùng, tôi đã sử dụng hồ sơ cường độ bán kính V-value để tìm vị trí các vòng tròn. Kết hợp với VNDetectContoursRequest của Vision, tôi đạt được độ chính xác trung bình 4 phát trên 5 phát mỗi thẻ (80%). Vẫn còn một chặng đường dài, và chúng tôi thậm chí chưa đề cập đến các trường hợp ngoại lệ như các phát súng chồng chéo lên nhau.
Vào cuối năm 2023, tôi tìm thấy một bài báo khác sử dụng YOLOv8 và Detectron2. Các tác giả hứa hẹn độ chính xác trung bình 96,5% nhưng tập trung vào việc phát hiện lỗ và đọc điểm số từ lớp hộp giới hạn (bounding-box class).
Tôi không thể chuẩn bị thủ công các lớp hộp giới hạn cho thẻ của mình, nhưng tôi đã có hình học hoạt động tốt nhờ phương pháp cũ. Những gì tôi thiếu là khả năng phát hiện lỗ đạn đáng tin cậy. YOLOv8 làm tốt việc phát hiện lỗ nhưng để lại hình học cho giả định rằng thẻ được căn chỉnh hoàn hảo.
Tôi đã hợp nhất hai cách tiếp cận: OpenCV xử lý hình học hình học cấu trúc - tâm, hình elip, vòng tròn, biến đổi phối cảnh. YOLOv8 xử lý định vị lỗ đạn, cùng kiến trúc với bài báo MDPI, được tinh chỉnh trên tập dữ liệu của riêng tôi. Dự đoán lớp của mô hình học được bị loại bỏ khi suy luận; điểm số đến từ khoảng cách đến tâm so với bán kính vòng hình học.
Sau khi gán nhãn và huấn luyện, tôi đã sử dụng coremltools để xuất mô hình sang CoreML - gói cuối cùng nặng 22,4 MB sau khi Xcode nhập nó.
Mô hình CoreML phát hiện lỗ đạn trên iPhone
Tính điểm và Phân tích
Khi kết nối cả hai phần, tôi expected việc tính điểm sẽ dễ dàng. Đa số là vậy, ngoại trừ việc tôi liên tục mất thời gian vào các không gian tọa độ và hoàn toàn quên mất về phối cảnh.
Những bức ảnh chụp từ góc nghiêng biến mỗi tâm mục tiêu thành một hình elip, và hồ sơ cường độ bán kính cần xử lý hậu kỳ để khớp chúng chính xác. Vision trả về hộp giới hạn trong khoảng 0-1 với gốc tọa độ ở góc dưới bên trái, nhưng UIKit có gốc tọa độ ở góc trên bên trái, vì vậy rất dễ mắc lỗi "lệch một vòng".
Một viên đạn .22 có đường kính 0,22 inch, nhưng giấy không rách sạch sẽ như vậy. Sau khi đọc lại cả hai bài báo, tôi bỏ cuộc và bắt đầu điều chỉnh hệ số nhân một cách thực nghiệm - thay đổi hằng số và chạy lại kiểm tra trên các thẻ mà tôi đã tính điểm thủ công. 30% là con số hiệu quả với tôi (tương đương 14,13% đường kính tâm mục tiêu).
Sau sáu tháng, tôi vẫn nghĩ mình bắn kém nhưng bây giờ hầu hết thời gian tôi biết lý do - tư thế, áp lực cò súng, hoặc hơi thở. Những thứ bạn cảm nhận hơn là đo lường. Đó là lý do người mới bắt đầu bắn các thẻ nhóm (grouping cards). Hình dạng của nhóm trên thẻ cho bạn biết rất nhiều điều - từ các vấn đề phổ biến như kéo cò và hơi thở đến các vấn đề với súng.
Tôi đã bắt đầu hành trình này nhằm loại bỏ dụng cụ đo điểm (và ngừng mang về nhà những đống các tông bị bắn thủng), nhưng đến khi tính điểm hoạt động, tôi lại càng quan tâm hơn đến việc tự động hóa không chỉ tính điểm mà cả phản hồi. Sau vài tháng thẻ điểm, tôi có thể xếp chồng tất cả các phát súng lên một bản đồ nhiệt tích lũy để xem xu hướng, hoặc so sánh hiệu suất của mình trên cả bốn khẩu súng chung.
Tôi thậm chí có thể chứng minh rằng ăn một chiếc bánh doughnut vài phút trước lượt bắn của tôi làm giảm hiệu suất trung bình 7 điểm trên 100 - điều này có thể là hiệu ứng giả dược, nhưng lý thuyết làm việc của tôi là nó làm tăng mức đường huyết của tôi.
Tôi đã kết hợp nó thành một ứng dụng nhỏ ưu tiên ngoại tuyến - ban đầu cho những người bạn ở câu lạc bộ, nhưng thực sự là cho bất kỳ ai muốn làm cho quy trình bắn súng của mình thú vị hơn một chút. Tôi đã học rằng phần lớn thế giới không quá quan tâm đến mục tiêu NSRA, vì vậy tôi vẫn đang từ từ thêm hỗ trợ cho các bộ luật và thẻ khác.
Dụng cụ đo điểm thực sự có công việc là giải quyết tranh chấp. Khi hai xạ thủ bất đồng về một phát súng ranh giới, điểm số là bất kể dụng cụ đó nói gì, vì đó là quy tắc. Không ai trong số họ quan tâm đến các mô hình thị giác máy tính tiên tiến của tôi.
Rất có thể, bạn cũng có thứ tương tự ở đâu đó - một công cụ đã làm việc của nó lâu hơn bạn tồn tại và sẽ thật ngớ ngẩn nếu cố gắng thay thế nó. Chúng ta có thể thất bại trong việc cho chúng nghỉ hưu. Nhưng tôi khao khát xây dựng những thứ kết thúc lên trên bàn của ai đó hai mươi năm nữa, tồn tại đủ lâu để ai đó đủ ngớ ngẩn để cố gắng thay thế chúng.
Bài viết liên quan

Công nghệ
Rò rỉ: Gói Xbox Game Pass "Starter Edition" sắp được tặng kèm với Discord Nitro
23 tháng 4, 2026

Công nghệ
Claude kết nối trực tiếp với ứng dụng cá nhân như Spotify, Uber Eats và TurboTax
23 tháng 4, 2026

Công nghệ
Giới thiệu Tolaria: Ứng dụng macOS mã nguồn mở quản lý cơ sở kiến thức Markdown tích hợp AI
23 tháng 4, 2026
