Metadata-Version: 2.1
Name: external-arrow
Version: 0.0.1a1.dev1
Summary: UNKNOWN
Home-page: https://github.com/as6520/external_arrow
Author: as6520
License: BSD 3-Clause
Platform: linux
Platform: Unix
Classifier: Development Status :: 3 - Alpha
Classifier: Programming Language :: Python :: 3.6
Classifier: License :: OSI Approved :: BSD License
Requires-Python: >=3.5
Description-Content-Type: text/markdown
Requires-Dist: kwiver

# EXTERNAL ARROW

This repository is an example for registering external plugins with kwiver and diva wheel 

## REQUIREMENTS
1. [libgl1-mesa-dev](https://packages.ubuntu.com/search?keywords=libgl1-mesa-dev)
2. [libexpat1-dev](https://packages.ubuntu.com/xenial/libexpat1-dev)
3. [libgtk2.0-dev](https://packages.ubuntu.com/xenial/libgtk2.0-dev)
4. [liblapack-dev](https://packages.ubuntu.com/xenial/liblapack-dev)
5. [python 3.5](https://www.python.org/downloads/release/python-350/)

## INSTALLATION
### KWIVER

    pip install kwiver-1.4.0-cp35-cp35m-linux_x86_64.whl

### DIVA

    pip install diva-0.0.1-cp35-cp35m-linux_x86_64.whl

### EXTERNAL ARROW

    pip install external_arrow-0.0.1-cp35-cp35m-linux_x86_64.whl

## VERIFYING REGISTRATION

    plugin_explorer --algo image_object_detector

    Plugins that implement type "image_object_detector"
    ---------------------
    Info on algorithm type "image_object_detector" implementation "TestObjectDetector"
      Plugin name: TestObjectDetector
            Test to verify if a python algorithm can be registered externally
    ---------------------
    Info on algorithm type "image_object_detector" implementation "external_arrow.arrow.test_object_detector"
      Plugin name: external_arrow.arrow.test_object_detector
            Version: 1.0
            Test to verify if a cpp algorithm can be registered externall
    ---------------------
    Info on algorithm type "image_object_detector" implementation "create_detection_grid"
      Plugin name: create_detection_grid
		    Create a grid of detections across the input image.
    ---------------------
    Info on algorithm type "image_object_detector" implementation "example_detector"
	  Plugin name: example_detector
		    Simple example detector that just creates a user-specified bounding box.
	---------------------
	Info on algorithm type "image_object_detector" implementation "hough_circle"
	  Plugin name: hough_circle
	        Hough circle detector
	---------------------
	Info on algorithm type "image_object_detector" implementation "detect_heat_map"
	  Plugin name: detect_heat_map
		    OCV implementation to create detections from heatmaps
`TestObjectDetector` and `external_arrow.arrow.test_object_detector` are python and c++ arrows registered by external_arrow



## REGISTERING ARROW/PROCESSES FROM EXTERNAL PACKAGE
Kwiver uses entrypoints to register vital arrows and sprokit processes. 
|  Language|Entrypoint  |
|:---:|:---:|
|C++|kwiver.cpp_search_paths  |
|python|kwiver.python_plugin_registration|

### PYTHON ARROW/PROCESS
The python process and arrows are registered using `kwiver.python_plugin_registration` in setup.py. Every process and arrows in the external package must be registered individually by specifying a unique key-value pair associated with the entrypoint . For example

    'kwiver.python_plugin_registration': 
    [ 'simple_detector=external_arrow.arrow.test_object_detector']
where `external_arrow.arrow.test_object_detector` is python arrow containing `__vital_algorithm_register__`

### C++ ARROW/PROCESS
The c++ process and arrows are registered using `kwiver.cpp_search_paths` in setup.py.  For registering c++ libraries, kwiver requires absolute path to the directory where the c++ libraries are present in the package. For example

    'kwiver.cpp_search_paths':
    ['simple_detector=external_arrow.register_cpp_arrow:get_cpp_path']
  where `external_arrow.register_cpp_arrow:get_cpp_path` is a python function that returns the directory where c++ libraries for `external_arrow` are present in the package. 
#### Note: Kwiver wheel does not provide a development environment for c++ libraries that depend on kwiver. We would recommend a static build of kwiver and diva to create the python package.

## SAMPLE REPOSITORY 
[external_arrow](https://github.com/as6520/external_arrow)


