2011-07-28 26 views
7

Tôi đang làm việc trên một ứng dụng OpenCV và câu hỏi của tôi là làm cách nào để triển khai và phân phối ứng dụng trên các máy không phát triển, các máy mà OpenCV không được cài đặt?Triển khai và phân phối các ứng dụng OpenCV với Xcode4 trên Mac OSX

Tôi đang sử dụng Xcode4 trên Mac OS X Lion với OpenCV 2.2.

cảm ơn

+0

nếu giải pháp không giúp bạn, bạn có thể giải thích cho chúng tôi những gì bạn mong đợi hơn không? cảm ơn rất nhiều, Julien – jmartel

Trả lời

1

Điều tôi khuyên là sử dụng công cụ tạo nền tảng chéo (như cải thiện tự động). Một một trong rất phổ biến là CMake mà không phải là dễ dàng như vậy để xử lý nhưng không quá khó khăn, không chỉ là một trong những phổ biến, nó được sử dụng bởi OpenCV ...

  • 1) Viết ứng dụng của bạn trên máy tính phát triển của bạn và viết một cmake (đừng quên để viết một phần để sử dụng OpenCV cmake)

  • 2) Cung cấp file cmake của bạn và thư viện OpenCV vào máy không phát triển

  • 3) Xây dựng với cMake kịch bản ứng dụng trên nền tảng đích, nếu bạn đã viết nó một cách chính xác, nó có thể xây dựng opencv (sử dụng Cmake OpenCV của riêng) và xây dựng ứng dụng của bạn bật (với cái bạn đã viết)

Nếu bạn muốn tiếp tục, bạn có thể tạo thuật sĩ cài đặt hoặc gói với CPack để tự động hóa mọi thứ.

Here is the link where you can download it

Julien,

+0

Cảm ơn, tôi sẽ thử điều này. Nhưng tôi muốn triển khai ứng dụng cho những người không phải công nghệ. Tôi đã đọc rằng nó có thể sao chép các tập tin thư viện vào thư mục ứng dụng để phân phối nó trên các máy không có OpenCV. Nhưng điều này không hiệu quả đối với tôi ... :( – sn3ek

+0

Chắc chắn, nếu bạn thực hiện một kịch bản và sử dụng trình hướng dẫn cài đặt, tôi không hiểu tại sao nó sẽ không dành cho những người không phải công nghệ ... Ít nhất nếu họ biết làm thế nào để bấm vào tiếp theo, nó phải là đủ: p – jmartel

+1

Không cần phải có người dùng cuối cài đặt các thư viện riêng biệt. OS X cho phép các thư viện được nhúng trong các gói ứng dụng. Đây là cách tiếp cận "đúng" trên Mac Nó loại bỏ các phụ thuộc bên ngoài và đảm bảo rằng các phiên bản dự kiến ​​của các thư viện là những cái đang được sử dụng – SSteve

4

Đây chỉ là một câu trả lời một phần vì tôi cũng chưa tìm ra cách để làm điều này với các thư viện OpenCV. (Đã phát hiện ra. Hãy xem bản cập nhật bên dưới.) Nhưng tôi đã thực hiện nó với các thư viện khác (SM2DGraphView).

Có ba điều mà cần phải xảy ra:

  1. Bạn cần phải sao chép các thư viện OpenCV rằng chương trình của bạn sử dụng vào gói ứng dụng. Để làm điều đó (trong Xcode 3, anyway), thêm một giai đoạn Copy Files build vào mục tiêu của bạn. Kéo tệp thư viện từ danh sách tệp của Xcode vào giai đoạn xây dựng. Bấm đúp vào mục Sao chép Tệp và đặt đích đến Khung.

    Lưu ý rằng bạn cần đảm bảo rằng thư viện mà bạn đưa vào trong dự án Xcode của bạn là một tệp thư viện chứ không phải là liên kết tượng trưng đến tệp thư viện. Nếu không, chỉ có liên kết tượng trưng sẽ được sao chép vào gói ứng dụng của bạn.

  2. Đường dẫn cài đặt của tệp khuôn khổ OpenCV cần phải được đặt thành @executable_path/../Framework. Nếu khung công tác đã được xây dựng trong Xcode, bạn sẽ làm điều này trong cài đặt dự án. Vì OpenCV không được xây dựng trong Xcode, bạn cần thực hiện sau khi thực tế với chương trình dòng lệnh install_name_tool: install_name_tool -id @executable_path/../Frameworks libopencv_imgproc.2.3.1.dylib. Bạn sẽ có thể thiết lập điều này trong một giai đoạn xây dựng Script Run trong mục tiêu của bạn.

  3. Thực thi cần tìm thư viện trong thư mục Frameworks của gói. Đây là nơi tôi hiện đang mắc kẹt.

Cập nhật

tôi thấy lệnh install_name_tool đúng để có được những chương trình để xem các thư viện (và các thư viện để xem các thư viện khác). Thông tin trên the Qt page for deploying OS X programs là chìa khóa.

Tôi chạy otool -L vào file thực thi trong Contents/MacOS thư mục chương trình của tôi và thấy điều này [dòng không liên quan bị gỡ bỏ]:

lib/libopencv_core.2.3.dylib (compatibility version 2.3.0, current version 2.3.1) 
lib/libopencv_imgproc.2.3.dylib (compatibility version 2.3.0, current version 2.3.1) 
lib/libopencv_highgui.2.3.dylib (compatibility version 2.3.0, current version 2.3.1) 

Vì vậy, tôi đã sử dụng các lệnh này (trong khi ở Contents/MacOS thư mục) để có được những chương trình để nhìn vào nơi thích hợp cho thư viện:

install_name_tool -change lib/libopencv_core.2.3.dylib @executable_path/../Frameworks/libopencv_core.2.3.1.dylib CocoaCVTest 
install_name_tool -change lib/libopencv_imgproc.2.3.dylib @executable_path/../Frameworks/libopencv_imgproc.2.3.1.dylib CocoaCVTest 
install_name_tool -change lib/libopencv_highgui.2.3.dylib @executable_path/../Frameworks/libopencv_highgui.2.3.1.dylib CocoaCVTest 

Sau đó, tôi chuyển sang Contents/thư mục Khung và sử dụng các lệnh này để nói với các thư viện, nơi họ đã được cài đặt:

install_name_tool -id @executable_path/../Frameworks/libopencv_core.2.3.1.dylib libopencv_core.2.3.1.dylib 
install_name_tool -id @executable_path/../Frameworks/libopencv_imgproc.2.3.1.dylib libopencv_imgproc.2.3.1.dylib 
install_name_tool -id @executable_path/../Frameworks/libopencv_highgui.2.3.1.dylib libopencv_highgui.2.3.1.dylib 

Bây giờ thư viện imgproc cần phải được cho biết nơi để tìm các thư viện lõi và highgui cần phải được cho biết nơi để tìm lõi và imgproc:

install_name_tool -change lib/libopencv_core.2.3.dylib @executable_path/../Frameworks/libopencv_core.2.3.1.dylib libopencv_imgproc.2.3.1.dylib 
install_name_tool -change lib/libopencv_core.2.3.dylib @executable_path/../Frameworks/libopencv_core.2.3.1.dylib libopencv_highgui.2.3.1.dylib 
install_name_tool -change lib/libopencv_imgproc.2.3.dylib @executable_path/../Frameworks/libopencv_imgproc.2.3.1.dylib libopencv_highgui.2.3.1.dylib 

Tôi vẫn đang chạy vào một vấn đề mà highgui đang tìm kiếm rất nhiều thư viện trong/opt/local/bin nhưng tôi khá tự tin rằng phần OpenCV của vấn đề được giải quyết. Bây giờ tôi chỉ cần đưa tất cả các lệnh này vào một giai đoạn xây dựng trong Xcode.

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