OpenFish
An open-source system written in GoLang for classifying marine species.
https://github.com/ausocean/openfish
Category: Biosphere
Sub Category: Marine Life and Fishery
Keywords from Contributors
archiving transforms measur generic optimize observation compose conversion projection animals
Last synced: about 18 hours ago
JSON representation
Repository metadata
OpenFish is an open-source system written in GoLang for classifying marine species. Tasks involve importing video or image data, classifying and annotating data (both manually and automatically), searching, and more. It is expected that OpenFish will use utilize computer vision and machine learning techniques.
- Host: GitHub
- URL: https://github.com/ausocean/openfish
- Owner: ausocean
- License: other
- Created: 2023-03-03T07:21:21.000Z (about 2 years ago)
- Default Branch: master
- Last Pushed: 2025-04-14T18:04:43.000Z (17 days ago)
- Last Synced: 2025-04-17T21:23:17.684Z (13 days ago)
- Language: Go
- Homepage: https://ausocean.github.io/openfish/
- Size: 8.32 MB
- Stars: 8
- Watchers: 4
- Forks: 0
- Open Issues: 29
- Releases: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
README.md
Authors: Trek Hopton, Alan Noble
Page Contents
Mission
AusOcean is dedicated to helping our oceans through the use of technology. Our development of a video livestream stack has resulted in a significant accumulation of marine footage being uploaded to YouTube, with hours of content available for viewing. While the availability of this marine content contributes to the raising of awareness for our oceans, we believe the video data provides significant potential for further positive impact.
The goal of the OpenFish project is to improve our understanding of marine species.
Description
OpenFish is an open-source system written in Golang for classifying marine species. Tasks involve importing video or image data, classifying and annotating data (both manually and automatically), searching, and more. It is expected that OpenFish will utilise computer vision and machine learning techniques.
Stages
Step 1 - AusOcean Data Storage Method
AusOcean will need to provide access to its marine video content to start the project off. Currently AusOcean livestreams to YouTube, on which the data is stored on the AusOcean channel. The data needs to be in the google datastore in preparation for a data access API.
Initially a collection of videos should be downloaded in mp4 (h264) from YouTube. This can happen via the YouTube Studio UI or using existing libraries such as pytube. Then we convert to MPEG-TS using ffmpeg, then upload to the datastore using VidGrind’s upload page. This could be automated but it’s not super important as this is just a starting point.
VidForward is AusOcean’s cloud-hosted video stream middleman. This will give us the ability to stream to YouTube while simultaneously streaming MPEG-TS (h264) to the datastore. Once this is implemented, we won’t have to upload videos from YouTube.
Step 2 - Data Access API
In this step, an API will be developed to provide access to the stored marine footage, allowing clients to retrieve and use the data.
A client should be able to find and download a segment of footage by providing a query eg. location, date, time.
It would be useful to be able to extract an image from a given video, this would require h264 decoding.
Step 3 - UI for and Video Annotation and Labelling
In this step, a user interface will be created to help users identify different species of marine life found in the footage.
This will incorporate a video player and a labelling interface. Users should be able to set the time range for an observation and draw a box around the object of interest. It would be helpful to have a chart/guide which informs species classification.
It is desirable for users to be able to share clips of video.
If a user is not logged in, they should only be able to play the video and see the labels (read only). When logged in, users can label the data. It would be useful to have different user classes eg. certified experts have higher weights on their classifications.
Step 4 - Dataset Curation
In this step, data from the labelling UI will be curated and organised into a training dataset for computer vision techniques.
Step 5 - Motion Detection
In this step, computer vision techniques will be applied to the marine footage to detect movements in the videos. Motion detection will help us narrow down the video to moments of interest.
Step 6 - Object Detection
In this step, computer vision techniques will be applied to the marine footage to detect objects eg. fish in the videos. Object detection will allow us to automatically create bounds around marine species for more efficient manual and automatic classification.
Step 7 - Automatic Species Classification / Suggestion
In this step, artificial intelligence algorithms will be used to automatically classify marine species based on the data collected in previous steps. A system will also be developed to provide suggestions in the UI for species classification to help users identify different species of marine life.
Step 8 - Species Statistics and Analysis Tools
In this step, statistics and analysis tools will be developed to enable the analysis of the data collected on marine species, and to provide trends and other insights into the distribution and diversity of species in the ocean.
Related Projects
Classification using images
FishNet and FishID are both open-source frameworks for classifying fish species from images. FishNet is a Python package where FishID is a mobile phone app (iOS and Android).
(iNaturalist)[https://www.inaturalist.org/pages/developers] provides image datasets for the purpose of species classification.
Classification using video
(Fish4Knowledge)[https://homepages.inf.ed.ac.uk/rbf/fish4knowledge/overview.htm], a system for fish recognition and behaviour analysis from underwater video written in Python. It was a research project at the University of Edinburgh and does not appear to have been active for ten years. The code can be found on SourceForge (here)[https://sourceforge.net/projects/fish4knowledgesourcecode/]. The datasets can be found on GitHub but not the code. It uses a GNU General Public License 2.0.
It appears to use older computer-vision techniques and is designed to run on desktop computers (not the cloud), and uses the MySQL database for storage.
Useful projects
Useful Projects
(DeepFish)[https://github.com/alzayats/DeepFish] is described as “A Realistic Fish-Habitat Dataset to Evaluate Algorithms for Underwater Visual Analysis”. It uses an MIT licence.
Licensing
While the GNU General Public License version 2.0 (GPLv2) and the BSD 3-Clause License are both widely-used open-source software licences, the latter will be used for OpenFish.
Key differences between the two licences are as follows:
- Copyleft vs. Permissive: The GPLv2 is a copyleft licence, which means that any modifications or derivative works of the software must also be distributed under the same licence. This ensures that the software remains free and open-source. The BSD 3-Clause License, on the other hand, is a permissive licence that allows for modifications and derivative works to be distributed under different licences, including proprietary licences.
- Patent Rights: The GPLv2 includes a patent clause that requires anyone who distributes the software to grant all recipients a licence to any patents that are necessary to use the software. The BSD 3-Clause License does not include a patent clause.
- Attribution: The BSD 3-Clause License requires that any distribution of the software include a notice that the software is licensed under the BSD 3-Clause License and include the copyright notice and disclaimer. The GPLv2 also requires that any distribution of the software include a notice that the software is licensed under the GPL, but it also requires that the source code be made available to recipients and that any modifications or derivative works be clearly marked as such.
- Compatibility: The GPLv2 and the BSD 3-Clause License are both compatible with other open-source licences, but the copyleft nature of the GPLv2 may make it less compatible with proprietary licences.
Owner metadata
- Name: AusOcean
- Login: ausocean
- Email:
- Kind: organization
- Description:
- Website: https://www.ausocean.org
- Location: Adelaide, Australia
- Twitter:
- Company:
- Icon url: https://avatars.githubusercontent.com/u/52269442?v=4
- Repositories: 2
- Last ynced at: 2023-04-20T02:26:17.031Z
- Profile URL: https://github.com/ausocean
GitHub Events
Total
- Issues event: 14
- Watch event: 2
- Delete event: 41
- Issue comment event: 36
- Push event: 239
- Pull request review comment event: 42
- Pull request review event: 81
- Pull request event: 193
- Create event: 102
Last Year
- Issues event: 14
- Watch event: 2
- Delete event: 41
- Issue comment event: 36
- Push event: 239
- Pull request review comment event: 42
- Pull request review event: 81
- Pull request event: 193
- Create event: 102
Committers metadata
Last synced: 9 days ago
Total Commits: 230
Total Committers: 4
Avg Commits per committer: 57.5
Development Distribution Score (DDS): 0.178
Commits in past year: 147
Committers in past year: 4
Avg Commits per committer in past year: 36.75
Development Distribution Score (DDS) in past year: 0.211
Name | Commits | |
---|---|---|
Scott Barnard | s****t@a****g | 189 |
dependabot[bot] | 4****] | 24 |
Alan Noble | a****e@g****m | 12 |
Trek H | t****n@g****m | 5 |
Committer domains:
- ausocean.org: 1
Issue and Pull Request metadata
Last synced: 2 days ago
Total issues: 86
Total pull requests: 257
Average time to close issues: 4 months
Average time to close pull requests: 12 days
Total issue authors: 5
Total pull request authors: 4
Average comments per issue: 0.45
Average comments per pull request: 0.26
Merged pull request: 210
Bot issues: 0
Bot pull requests: 52
Past year issues: 32
Past year pull requests: 168
Past year average time to close issues: 3 months
Past year average time to close pull requests: 8 days
Past year issue authors: 4
Past year pull request authors: 4
Past year average comments per issue: 0.34
Past year average comments per pull request: 0.2
Past year merged pull request: 125
Past year bot issues: 0
Past year bot pull requests: 52
Top Issue Authors
- scott97 (67)
- scruzin (8)
- trekhopton (8)
- saxon-milton (2)
- ao-david (1)
Top Pull Request Authors
- scott97 (191)
- dependabot[bot] (52)
- scruzin (8)
- trekhopton (6)
Top Issue Labels
- enhancement (39)
- bug (18)
- documentation (8)
- good first issue (4)
- chore (1)
- ci (1)
Top Pull Request Labels
- chore (63)
- enhancement (57)
- documentation (16)
- bug (10)
- ci (5)
Package metadata
- Total packages: 2
- Total downloads: unknown
- Total dependent packages: 3 (may contain duplicates)
- Total dependent repositories: 0 (may contain duplicates)
- Total versions: 10
proxy.golang.org: github.com/ausocean/openfish/datastore
Package datastore offers common datastore API with multiple store implementations:
- Homepage: https://github.com/ausocean/openfish
- Documentation: https://pkg.go.dev/github.com/ausocean/openfish/datastore#section-documentation
- Licenses: BSD-3-Clause
- Latest release: v0.0.0-20230419052705-c70f986b30db (published about 2 years ago)
- Last Synced: 2025-04-28T13:32:37.613Z (3 days ago)
- Versions: 1
- Dependent Packages: 1
- Dependent Repositories: 0
-
Rankings:
- Dependent packages count: 8.08%
- Average: 8.697%
- Dependent repos count: 9.314%
proxy.golang.org: github.com/ausocean/openfish
- Homepage: https://github.com/ausocean/openfish
- Documentation: https://pkg.go.dev/github.com/ausocean/openfish#section-documentation
- Licenses: BSD-3-Clause
- Latest release: v0.1.6 (published 5 months ago)
- Last Synced: 2025-04-29T14:06:21.108Z (2 days ago)
- Versions: 9
- Dependent Packages: 2
- Dependent Repositories: 0
-
Rankings:
- Dependent packages count: 8.08%
- Average: 8.697%
- Dependent repos count: 9.314%
Dependencies
- cloud.google.com/go v0.110.0
- cloud.google.com/go/compute v1.19.0
- cloud.google.com/go/compute/metadata v0.2.3
- cloud.google.com/go/datastore v1.11.0
- cloud.google.com/go/iam v0.13.0
- cloud.google.com/go/storage v1.30.1
- github.com/andybalholm/brotli v1.0.5
- github.com/gofiber/fiber/v2 v2.45.0
- github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e
- github.com/golang/protobuf v1.5.3
- github.com/google/go-cmp v0.5.9
- github.com/google/s2a-go v0.1.0
- github.com/google/uuid v1.3.0
- github.com/googleapis/enterprise-certificate-proxy v0.2.3
- github.com/googleapis/gax-go/v2 v2.8.0
- github.com/klauspost/compress v1.16.3
- github.com/mattn/go-colorable v0.1.13
- github.com/mattn/go-isatty v0.0.18
- github.com/mattn/go-runewidth v0.0.14
- github.com/philhofer/fwd v1.1.2
- github.com/rivo/uniseg v0.2.0
- github.com/savsgio/dictpool v0.0.0-20221023140959-7bf2e61cea94
- github.com/savsgio/gotils v0.0.0-20230208104028-c358bd845dee
- github.com/tinylib/msgp v1.1.8
- github.com/valyala/bytebufferpool v1.0.0
- github.com/valyala/fasthttp v1.47.0
- github.com/valyala/tcplisten v1.0.0
- go.opencensus.io v0.24.0
- golang.org/x/crypto v0.7.0
- golang.org/x/net v0.9.0
- golang.org/x/oauth2 v0.7.0
- golang.org/x/sys v0.8.0
- golang.org/x/text v0.9.0
- golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2
- google.golang.org/api v0.118.0
- google.golang.org/appengine v1.6.7
- google.golang.org/genproto v0.0.0-20230403163135-c38d8f061ccd
- google.golang.org/grpc v1.54.0
- google.golang.org/protobuf v1.30.0
- 210 dependencies
Score: 6.095824562432225