Performs tagging of image and videos based on various taggers
Project description
Media Tagger
Problem statement
When analyzing large amount of creatives of any nature (being images and videos) it might be challenging to quickly and reliably understand their content and gain insights.
Solution
media-tagger performs tagging of image and videos based on various taggers
- simply provide a path to your media files and
media-taggerwill do the rest.
Deliverable (implementation)
media-tagger is implemented as a:
- library - Use it in your projects with a help of
media_tagging.MediaTaggingServiceclass. - CLI tool -
media-taggertool is available to be used in the terminal. - HTTP endpoint -
media-taggercan be easily exposed as HTTP endpoint. - Langchain tool - integrate
media-taggerinto your Langchain applications.
Deployment
Prerequisites
- Python 3.10+
- A GCP project with billing account attached
- API Enabled:
- For
google-cloudtagger: Video Intelligence API and Vision API enabled. - For
geminitagger: Vertex AI API enabled.
- For
- Environmental variables specified:
- GOOGLE_API_key to access to access Google Gemini.
export GOOGLE_API_KEY=<YOUR_API_KEY_HERE> GOOGLE_CLOUD_PROJECT- points the Google Cloud project with Vertex AI API enabled.export GOOGLE_CLOUD_PROJECT=<YOUR_PROJECT_HERE>
- GOOGLE_API_key to access to access Google Gemini.
Installation
Install media-tagger with pip install media-tagging[all] command.
Alternatively you can install subsets of media-tagging library:
media-tagging[google-cloud]- tagging videos and images with Google Cloud APIs.media-tagging[google-cloud-vision]- only for tagging images.media-tagging[google-cloud-videointelligence]- only for tagging videos.
media-tagging[gemini]- tagging videos and images with Vertex AI API.media-tagging[google-genai]- only for tagging images via Gemini.media-tagging[google-vertexai]- only for tagging videos via Gemini.
media-tagging[langchain]- tagging videos and images with Langchain.
Usage
Tagging media
This section is focused on using
media-taggeras a CLI tool. Check library, http endpoint, langchain tool sections to learn more.
Once media-tagger is installed you can call it:
media-tagger ACTION MEDIA_PATHs \
--media-type <MEDIA_TYPE> \
--tagger <TAGGER_TYPE> \
--db-uri=<CONNECTION_STRING> \
--writer <WRITER_TYPE> \
--output <OUTPUT_FILE_NAME>
where:
ACTION- eithertagordescribe.MEDIA_PATHs- names of files for tagging (can be urls) separated by spaces.
Instead of reading
MEDIA_PATHsas positional arguments you can read them from a file using
--input FILENAME.CSVargument. Use--input.column_name=NAME_OF_COLUMNto specify column name in the file.
<MEDIA_TYPE>- type of media (YOUTUBE_VIDEO, VIDEO, IMAGE, TEXT).<TAGGER_TYPE>- name of tagger, supported options.
Tagger can be customized via
tagger.option=valuesyntax. I.e. if you want to request a specific number of tags you can add--tagger.n-tags=100CLI flag.
<CONNECTION_STRING>- Optional connection string to the database with tagging results (i.e.sqlite:///tagging.db). If this parameter is set make sure that DB exists.
To create an empty Sqlite DB execute
touch database.db.
<WRITER_TYPE>- writer identifier (check available options at garf-io library).<OUTPUT_FILE_NAME>- name of the file to store results of tagging (by defaulttagging_results).
Supported taggers
| identifier | supported media types | tagging output | options |
|---|---|---|---|
google-cloud |
image, video |
tag |
n-tags=10 |
langchain |
image, video |
tag, description |
n-tags=10, tags=tag1,tag2,tag3 |
gemini |
image, video, youtube_video |
tag, description |
n-tags=10 |
Tagger customizations
langchainandgeminitaggers can usecustom-promptparameter to adjust built-in prompts.
Add--tagger.custom-prompt=YOUR_PROMPT_HERE, where YOUR_PROMPT_HERE is either prompt or a file path (local or remote) with.txtextension.Example:
--tagger.custom_prompt="Is this an advertising? Answer yes or no'- When passing custom prompt you can opt out of using built in schemas in
media-taggerby using--tagger.no-schema=Trueor provide a custom schema via--tagger.custom_schema=/path/to/schema.jsonparameter.
- When passing custom prompt you can opt out of using built in schemas in
geminitagger forvideoandyoutube_videomedia types supports specifyingVideoMetadataparameters (fps,start_offset,end_offset)Example:
--tagger.fps=5geminitagger can usen_runs=Nparameter to repeat tagging processNtimes, i.e.--tagger.n_runs=10will tag the same medium 10 times.
Loading tagging results
If you want to import tags to be used later, you can use media-loader utility.
media-loader PATH_TO_FILE \
--media-type <MEDIA_TYPE> \
--loader <LOADER_TYPE> \
--db-uri=<CONNECTION_STRING> \
--action <ACTION>
where:
<MEDIA_TYPE>- type of media (YOUTUBE_VIDEO, VIDEO, IMAGE).
For YouTube file uploads specify YOUTUBE_VIDEO type.
<LOADER_TYPE>- name of loader, currently onlyfileis supported (data are saved to CSV).
Loader can be customized via
loader.option=valuesyntax. I.e. if you want to change the default column name with media tags are located you can specify--loader.tag_name=new_column_nameCLI flag.
<CONNECTION_STRING>- Connection string to the database with tagging results (i.e.sqlite:///tagging.db). If this parameter is set make sure that DB exists.
To create an empty Sqlite DB execute
touch database.db.
ACTION- eithertagordescribe.
If loading tagging results with file loader, the CSV file should contains the following columns:
media_url- location of medium (can be remote or local).tag- column that contains name of a tag.score- column that contains prominence of a tag in the media.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file media_tagging-2.5.2.tar.gz.
File metadata
- Download URL: media_tagging-2.5.2.tar.gz
- Upload date:
- Size: 36.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.10.9 {"installer":{"name":"uv","version":"0.10.9","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5352c71437369fb672938ff8a3d13274a80aaccc7291ab924386d86895376c08
|
|
| MD5 |
07c6a5a662dab17da130023a490a4ba4
|
|
| BLAKE2b-256 |
7e628beaa954eea4f8c375ca1c9b7644a49a8e63f09baa8eb27c373ea3a44a9b
|
File details
Details for the file media_tagging-2.5.2-py3-none-any.whl.
File metadata
- Download URL: media_tagging-2.5.2-py3-none-any.whl
- Upload date:
- Size: 52.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.10.9 {"installer":{"name":"uv","version":"0.10.9","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d872a9d2cc3d77b6135ce3acff3b77f02bb33b1f8b6a0ebbace17b5f67463ec7
|
|
| MD5 |
ea3661d9c092b64d7d4fd8d36859b837
|
|
| BLAKE2b-256 |
8a312a24e33af57472edfc088062f029cd896bda786fb591ce96311f818ef6aa
|