2011-10-04 48 views
6

Có tài liệu hữu ích nào để sử dụng chức năng HOGDescriptor trong Python OpenCV không? Tôi đã đọc tài liệu C++, nhưng các phiên bản Python hoạt động khác nhau và tôi không thể tìm ra nó bằng cách sửa đổi.Python OpenCV và Biểu đồ định hướng Gradient

Cụ thể là, tôi đang tìm lệnh OpenCV bằng Python lấy ảnh và vị trí pixel làm đầu vào (và cũng có thể có một số thông số về kích thước cửa sổ phát hiện) và sau đó trả về một mảng Python chứa HOG vector đặc trưng (ví dụ: danh sách hoặc mảng NumPy, v.v., trong đó phần tử thứ j của danh sách là thành phần biểu đồ thứ j từ biểu đồ của các gradient được định hướng).

Mục tiêu của tôi là cấp các biểu đồ này vào các đường ống SVM scikits.learn (vì vậy tôi có thể tránh đào tạo SVM OpenCV), nhưng để thực hiện điều này, tôi cần các vectơ tính năng thực tế chứ không phải loại đường ống chuỗi xử lý HOG OpenCV xuất hiện để sử dụng.

Bất kỳ triển khai Python nào khác của mã HOG cũng sẽ hoạt động. Tôi cần một cái gì đó hợp lý hiệu quả mặc dù để so sánh với một cơ sở mã mà tôi đang viết bản thân mình.

+0

Lưu ý: một thực thi C++ hợp lý có các đối số dòng lệnh dễ sử dụng cũng sẽ hoạt động và tôi có thể kết hợp nó vào công cụ Python của tôi. Nếu bạn biết bất kỳ dự án nào có mã HOG hiệu quả, nó có thể hữu ích. – ely

Trả lời

0

Làm thế nào về một chút Matlab là nguồn cảm hứng, thuộc này article

+0

Cảm ơn! Tôi có lẽ có thể dịch điều này sang Python. Mặc dù vậy, có thể khó chuyển nó sang các ngôn ngữ khác. – ely

0

hãy xem http://sourceforge.net/projects/hogtrainingtuto/?_test=beta đối với một số mã python HOG và một loạt các triển khai C, cpp, java. Đối với tài liệu thực sự của python và opencv, tôi cũng đang thua lỗ. Nhưng điều này sẽ giúp bạn một chút

+0

Tôi không thấy bất kỳ mã Python nào trong tệp lưu trữ mà tôi đã tải xuống từ liên kết đó. Điều duy nhất liên quan đến HOG là một tệp thực thi được gọi là 'cvHogFeatureCal' nhưng nó không có tài liệu mà tôi có thể tìm thấy. Những thứ khác là OpenCV thường thực hiện các bộ phân loại như các tầng, nơi người dùng nhập các hình ảnh tiêu cực cứng và sau đó tích cực cho việc đào tạo, và OpenCV tự động đi tất cả các cách để tạo các bộ phân loại. Tôi đặc biệt cần phải tránh điều đó và chỉ chiếm đoạt các vectơ tính năng HOG sau đó thực hiện đào tạo phân loại với phần mềm khác (scikits.learn). – ely

0

Các 'Poselets' thực hiện here có một thực hiện C descriptor HOG đó, mặc dù viết bằng MATLAB trong tâm trí, có thể được điều chỉnh để chạy với python bằng cách sử dụng ctypes và numpy.

Bạn có thể xóa tất cả các thói quen mex và khai báo các mảng đầu vào và đầu ra của mình dưới dạng float * trong hàm C.

Bạn cần đảm bảo rằng các mảng cố định của bạn là Fortran liền kề nhau. Điều này có thể đạt được bằng cách:

image = image.copy(order='F', dtype = float32)

+0

Tôi sử dụng công cụ Poselet khá thường xuyên. Dựa trên cách mã nguồn Java không có giấy tờ và không thể hiểu được của họ là dành cho công cụ chú thích trình duyệt của họ, tôi có xu hướng chỉ sử dụng mã Matlab trong bài viết trên cùng. Ý tưởng Poselet thật tuyệt vời, nhưng thực tế là (a) nó ở Matlab và (b) họ không muốn giúp các nhà khoa học bằng cách cung cấp bất kỳ sự hỗ trợ nào cho mã của họ, làm cho tôi ít có khuynh hướng sử dụng công cụ của họ. Nó có lẽ sẽ chỉ là công việc nhiều để dịch các thói quen Matlab hàng đầu từ Maurits. – ely

+0

Đủ công bằng, tôi đã không thử nghiệm với việc triển khai của họ nhiều, tôi đoán phần lớn là do thiếu tài liệu! Nhưng tôi đã xây dựng một cái gì đó tương tự bằng cách sử dụng thói quen HOG của họ như tôi đã nêu ở trên, và nó hoạt động tốt. Nếu tốc độ là một ưu tiên, việc sử dụng thường trình C của chúng có thể là một giải pháp tốt hơn so với các vòng lặp lồng nhau trong python. – Martin

5

Đây là muộn một chút, nhưng, để tham khảo trong tương lai, scikit-image có một thực hiện HOG. Đây là một hàm duy nhất có thể trích xuất Biểu đồ của các gradient định hướng cho một hình ảnh nhất định.

+2

Vâng, tôi đã nhận được một bản sao nâng cao của điều đó trước khi nó được chấp nhận vào scikits.image. Tôi thấy rằng nó không tốt hay đủ nhanh. Một điều nữa là giao diện quá khó sử dụng. Ví dụ, mã HoG Dalal và Triggs chấp nhận danh sách các điểm chính trong một hình ảnh, trong khi phiên bản scikits.image chỉ có thể làm các bản vá lỗi. Tôi đã kết thúc bằng cách viết mã của riêng tôi. Tôi đã viết một "vanilla" HoG cho Python và phiên bản riêng của tôi về HoG hình chóp. Cuối cùng, tôi đã triển khai hai phiên bản GPU trong PyCUDA. Bạn có thể tìm thấy mã được liên kết [tại đây] (http://people.seas.harvard.edu/~ely/faceparts/software.html) – ely

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