Metadata-Version: 2.1
Name: camera-service-api
Version: 1.1.1
Summary: Camera service grpc api (for python3.7 )
Home-page: UNKNOWN
Author: L.K
Author-email: L.K@idontwant.com
License: UNKNOWN
Platform: UNKNOWN
Classifier: Programming Language :: Python :: 3
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Operating System :: POSIX :: Linux
Requires-Python: >=3.7
Description-Content-Type: text/markdown
Requires-Dist: grpcio
Requires-Dist: protobuf

# Camera service grpc API 

## Install 

1. using pip install local package 

```bash

pip install camera-service-api

```


## Dependencies 

- grpcio     1.63.0
- protobuf   5.26.1


## API 



### Get API Instance  `create_camera_service_api`  

- host , camera server host , e.g.  `localhost` 
- port , camera server port , e.g.  `6000`


```python 

# host 
api = create_camera_service_api(host, port)


```
### Get All camera meta infos `get_camera_metas`

```python

def get_camera_metas(self) -> List[CameraMeta]:
    ...     

```

```python

metas = api.get_camera_metas()
for meta in metas:
    print(f"Camera modelName: {meta.modelName} - deviceVersion: {meta.deviceVersion}")
    print("get camera image serialNumber ", meta.serialNumber)
    print("get info ", meta.info)


```

### CameraMeta 

- cameraType , camera type , `GIGE` | `u3v` 
- serialNumber : camera serial number , 
- modelName  : model name 
- manufactureName : manufacture name 
- deviceVersion :  device version 
- userDefinedName : name defined by user 
- info : Map[string,string] , ext info 


### Get live image by serial number 

input camera serial number and return live image (jpg), bytes.
and if return `None` means the camera maybe offline. 

and using `try .. except` for catch `exception` 

```python

def get_image(self, sn: str) -> bytes:
    ...     

```

Example: 

```python

...
body = api.get_image(meta.serialNumber)
print(" body : ", len(body)  )

...

fopen = open('test.jpg', 'wb+')
fopen.write( body )
fopen.close()

...

```


## Example 

```python
import time

import grpc

from services.cameras.camera_service_api import create_camera_service_api


max_test = 100

def test_camera_api(host, port):
    #
    api = create_camera_service_api(host, port)
    metas = api.get_camera_metas()
    for meta in metas:
        print(f"Camera modelName: {meta.modelName} - deviceVersion: {meta.deviceVersion}")
        print("get camera image serialNumber ", meta.serialNumber)
        print("get info ", meta.info)

        t1 = time.time()
        try:

            for i in range( max_test ):
                body = api.get_image(meta.serialNumber)
                print(" body : ", i, len(body)  )

        except Exception as e:
            print( e) 

        t2 = time.time()
        tt = t2-t1
        avg = tt / max_test
        print( f" Try {max_test} times get image , using {tt} , avg {avg} ")

        # fopen = open('body.jpg'.encode('utf-8'), 'wb+')
        # fopen.write( body, )
        # fopen.close()

# protect the entry point
if __name__ == '__main__':
    print("GRPC Version : {} ".format(grpc.__version__))
    test_camera_api("127.0.0.1", 6000)



```

