diff --git a/README.md b/README.md index 8d2736c..b728d7e 100755 --- a/README.md +++ b/README.md @@ -31,14 +31,20 @@ Web-based, professional and scalable velocimetry analysis for operational river # What is LiveOpenRiverCam LiveOpenRiverCam allows you to run operational measurement stations that estimate river discharge from videos. -It is meant for National or HydroMeteorological Societies (NHMS), hydropower authorities, waterboards, or service +It is meant for e.g. National HydroMeteorological Societies (NHMS), hydropower authorities, waterboards, or service providers of such entities, who wish to establish their own services for such users. -It is meant to provide fully automated data streams from operational camera/water level feeds that record videos at set -time intervals. The platform can either receive raw videos which are then orchestrated for processing on cloud nodes -or receive already processed videos, which are processed on-site ("edge processing"). The processing is performed by -[NodeOpenRiverCam](https://github.com/localdevice/nodeorc), the node processing tool around OpenRiverCam. -The processing methods read videos, selects frames, enhances features, orthorectifies and estimates surface velocity -and discharge using state-of-the-art velocimetry methods, all fully automated. +LiveORC will provide you with the following functionalities: +* A administration-style front end for managing sites, configuration, videos and time series. +* Visualization of time series and video analyses. +* Fully automated data streaming from operational camera/water level feeds in the field with "edge processing". +* Per-video processing through "cloud processing". +* A very fast and easy start to this all, through convenient virtualization of services and a very easy to use set up + script. + +Processing on sites ("edge processing") or on cloud nodes ("cloud processing") is performed by +[NodeOpenRiverCam](https://github.com/localdevice/nodeorc), the node processing tool around OpenRiverCam. The +processing methods read videos, select frames, enhance features, orthorectify and estimates surface velocity +and discharge using state-of-the-art velocimetry methods. # Acknowledgements @@ -385,11 +391,13 @@ to report on LiveORC. NodeORC makes ample use of the REST API for callbacks of r The REST API also allows you to develop your own applications on top of LiveORC. For instance, if you wish to build your own web interface around OpenRiverCam for a specific user or with a specific application in mind this is in principle possible! The API documentation is also disclosed automatically when you start -LiveORC. If you are on `localhost:8000`, you can find it by browsing to `http://localhost:8000/api/docs`. -The api calls are available on `http://localhost:8000/api`. +LiveORC. If you are on `localhost:8000`, you can find it by browsing to `http://localhost:8000/api/docs`. This gives +the documentation per API end point in . If you prefer a swagger layout, you can also browse to +`http://localhost:8000/api/docs_swagger`. The api calls are available on `http://localhost:8000/api`. Replace your +hostname by the one you have configured if necessary. # Recipes -b + Recipes describe from top to bottom how a video is treated. They describe in order: * the video - what frames to use, what the actual water level during the recording was and if frames must be stabilized * frame preprocessing and orthorectification - several preprocessing methods can be applied to enhance diff --git a/api/models/base.py b/api/models/base.py index f4edc01..3029307 100644 --- a/api/models/base.py +++ b/api/models/base.py @@ -20,6 +20,7 @@ class Meta: def institute(self): return self.site.institute + class BaseModelNoInstitute(models.Model): creator = models.ForeignKey( @@ -32,7 +33,6 @@ class Meta: abstract = True - class BaseInstituteModel(models.Model): """ BaseModel with an additional stored field (instead of property) for retrieving the institute diff --git a/api/models/time_series.py b/api/models/time_series.py index 96b51fb..22a1921 100644 --- a/api/models/time_series.py +++ b/api/models/time_series.py @@ -60,7 +60,6 @@ def save(self, *args, **kwargs): # video_closest.status = VideoStatus.QUEUE video_closest.save() - class Meta: indexes = [models.Index(fields=['site', 'timestamp'])] verbose_name_plural = "time series" diff --git a/api/views/camera_config.py b/api/views/camera_config.py index 0e2c666..6910764 100644 --- a/api/views/camera_config.py +++ b/api/views/camera_config.py @@ -128,8 +128,6 @@ def create_task(self, request, *args, **kwargs): status=status.HTTP_400_BAD_REQUEST, content_type="application/json" ) - - task_form = get_task_form(instance, query_callbacks) record = TaskForm( id=task_form["id"], diff --git a/api/views/device.py b/api/views/device.py index f01cf85..2511dc7 100644 --- a/api/views/device.py +++ b/api/views/device.py @@ -18,6 +18,7 @@ def get_client_ip_address(request): ip_addr = req_headers.get('REMOTE_ADDR') return ip_addr + class DeviceViewSet(BaseModelViewSet): """ API endpoints that allows devices to be viewed or edited. @@ -27,7 +28,6 @@ class DeviceViewSet(BaseModelViewSet): permission_classes = [permissions.IsAuthenticated] http_method_names = ["get", "post", "delete", "patch"] filter_backends = [DjangoFilterBackend] - filterset_fields = ['institute'] def get_queryset(self): """