8

Tôi đang phát triển ứng dụng thực tế tăng cường cho Android sử dụng máy ảnh của điện thoại để nhận dạng sắp xếp các ô vuông màu trên mỗi khuôn mặt của Cube của Rubik.Nhận dạng điểm đánh dấu trên Android (nhận dạng khối Rubik)

Một điều mà tôi không chắc chắn về việc tôi sẽ phát hiện và nhận dạng các hình vuông màu trên mỗi khuôn mặt của khối lập phương như thế nào. Nếu bạn nhìn vào Cube của Rubik thì bạn có thể thấy rằng mỗi ô vuông là một trong sáu màu có thể có viền đen mỏng. Điều này khiến tôi nghĩ rằng cần phải tương đối đơn giản để phát hiện một hình vuông, có thể sử dụng API phát hiện điểm đánh dấu hiện có.

Rubik's Cube

Câu hỏi của tôi thực sự là, có ai ở đây có bất kỳ kinh nghiệm với nhận dạng hình ảnh và Android? Lý tưởng nhất là tôi muốn có thể thực hiện và API hiện tại, nhưng nó sẽ là một dự án thú vị để làm từ đầu nếu ai đó có thể chỉ cho tôi đi đúng hướng để bắt đầu.

Rất cám ơn trước.

+0

Tôi không thể giúp bạn, nhưng tôi chỉ muốn nói rằng một ứng dụng mà tôi có thể trỏ camera vào khối lập phương và nhận chỉ đường từng chặng để giải quyết nó sẽ là * tuyệt vời *. Chúc bạn may mắn, và xin vui lòng, đăng lại đây một ngày nào đó trong tương lai nếu bạn làm cho nó hoạt động. –

+0

Đó là kế hoạch :-) Vấn đề lớn trước hết sẽ khiến Android nhận ra khối lập phương và sau đó tôi có thể làm việc để giúp bạn hướng dẫn bạn qua một giải pháp. Phiên bản beta công khai sẽ được xuất bản lên Android Market để phản hồi của người dùng (khi tôi nghĩ rằng nó đang ở giai đoạn beta) và tôi sẽ ghé qua và cập nhật câu hỏi này để cho các bạn biết rằng nó đang ở đó để thử nghiệm. – greenie

+0

FYI, hình ảnh nội tuyến bị hỏng. Bạn có bản sao bạn có thể tải lên lại không? –

Trả lời

5

Bạn có muốn trỏ máy ảnh vào hình lập phương không và có hiểu cấu hình không?

Nhận diện các đối tượng trong ảnh là một vấn đề AI mở. Vì vậy, bạn sẽ cần phải hạn chế vấn đề khá nhiều để có được lực kéo trên đó. Tôi khuyên bạn nên bắt đầu bằng một cái gì đó như:

  1. Khối lập phương sẽ được chụp từ khoảng cách chính xác 12 inch, với nguồn sáng 100W ngay phía sau máy ảnh. Khối lập phương sẽ được đặt theo đường chéo để nó thể hiện chính xác 3 khuôn mặt, với một góc ở giữa. Máy ảnh sẽ được định vị sao cho nó tập trung trực tiếp vào góc khối lập phương ở giữa.

  2. Ảnh sẽ được chụp. Sau đó khối lập phương sẽ được xoay 180 độ theo chiều dọc và chiều ngang, để ba mặt khác có thể nhìn thấy được. Một bức ảnh thứ hai sẽ được chụp. Vì bạn biết chính xác vị trí của từng khuôn mặt, hãy lấy một vài pixel từ mỗi vùng và giả sử đó là màu của hình vuông đó. Hãy nhớ rằng khối lập phương sẽ thường được tranh giành, không đồng đều như trong hình ở đây. Vì vậy, bạn luôn luôn phải nhìn vào 9 * 6 = 54 hình vuông nhỏ để có được màu sắc của mỗi người.

  3. Thông tin trong hai ảnh này xác định cấu hình khối. Tạo một hình ảnh của khối lập phương trong cùng một cấu hình và cho phép người dùng xác nhận hoặc sửa nó.

Có thể đơn giản hơn để chụp 6 ảnh - một trong mỗi khuôn mặt và di chuyển xung quanh khuôn mặt theo thứ tự được xác định rõ. Hãy nhớ rằng hình vuông trung tâm của mỗi khuôn mặt không di chuyển, và xác định màu sắc chính xác cho khuôn mặt đó.

Khi bạn có cấu hình, bạn có thể sử dụng các hoạt động OpenGL để xoay các lát khối. Đây sẽ là một chương trình với hàng trăm dòng mã để xác định và xoay khối lập phương, cộng với bất cứ điều gì bạn làm để nhận dạng hình ảnh.

+0

Có, đây là cách tôi dự tính ứng dụng hoạt động. Tôi đã hy vọng rằng có thể có một API phát hiện đánh dấu hiện có mà tôi có thể thực hiện (vì mỗi khối nhỏ trên một khuôn mặt có thể được định nghĩa là một điểm đánh dấu). Tuy nhiên, đây là lời khuyên tuyệt vời nếu tôi không thể tìm thấy API hiện tại. – greenie

0

Điều này question có thể cung cấp cho bạn một số gợi ý về cách sử dụng opencv trên android. Nhưng tôi không biết nếu nó đòi hỏi người dùng phải cài đặt một số thư viện thêm phức tạp.

0

Ý tưởng hay, tôi cũng đang sử dụng máy dò tìm điểm đánh dấu và máy đánh dấu, nhưng đối với một dự án khác. Tôi vẫn đang tìm kiếm nếu có bất kỳ thông tin nào có sẵn trên web, ví dụ: liên kết openCV hoặc ARtoolkit với SDK Android. Nếu bạn có bất kỳ thông tin bổ sung nào về cách liên kết API thị giác máy tính, vui lòng cho tôi biết.

Hẹn gặp lại và sớm!

1

Ngoài những gì Peter nói, có lẽ tốt nhất là nên che đường dẫn hướng lên hình ảnh của hình khối khi người dùng chụp ảnh. Người sử dụng sau đó xếp hàng khối lập phương trong các dòng hướng dẫn, cho dù một mặt của nó (một đường dẫn hướng vuông) hoặc ba cạnh (ba hình vuông trong phối cảnh). Bạn cũng có thể muốn người dùng chỉ định số hộp màu trong mỗi hàng. Trong mã của bạn, hãy lấy mẫu màu ở vị trí trung tâm của mỗi hộp màu và so sánh nó với các hộp màu khác (trong một số mức dung sai) để xác định màu sắc. Ngoài việc cung cấp các kết quả được công nhận cho người dùng, sẽ tốt hơn nếu cho phép người dùng thực hiện các thay đổi đối với các màu được công nhận. Nó không có vẻ như nhận dạng hình ảnh lạ mắt là cần thiết.

0

NYARToolkit sử dụng tính năng phát hiện điểm đánh dấu và được thực hiện trong JAVA (cũng như C# được quản lý cho các thiết bị windows). Tôi không biết nó hoạt động tốt như thế nào trên nền tảng Android, nhưng tôi đã thấy nó được sử dụng trên các thiết bị di động Windows, và nó được thực hiện rất tốt.

Chúc bạn may mắn và lập trình vui vẻ!

0

Tôi khuyên bạn nên xem thư viện OpenCV Andoid. Bạn có thể muốn kiểm tra các thuật toán phát hiện blob. Bạn cũng có thể muốn xem xét các đường Hough hoặc Countours để phát hiện quads.

Các vấn đề liên quan