{"id":45245956,"url":"https://github.com/rfcx/tfk-audio","last_synced_at":"2026-02-20T22:21:03.276Z","repository":{"id":292144224,"uuid":"577188187","full_name":"rfcx/tfk-audio","owner":"rfcx","description":"Tools for TensorFlow/Keras audio recognition workflows","archived":false,"fork":false,"pushed_at":"2025-05-08T10:19:01.000Z","size":13693,"stargazers_count":1,"open_issues_count":3,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-05-08T11:29:29.285Z","etag":null,"topics":["audio","audio-analysis","audio-classification","audio-processing","deep-learning","keras","tensorflow","tensorflow2"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rfcx.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2022-12-12T07:07:50.000Z","updated_at":"2025-05-08T10:19:06.000Z","dependencies_parsed_at":"2025-05-08T11:40:18.410Z","dependency_job_id":null,"html_url":"https://github.com/rfcx/tfk-audio","commit_stats":null,"previous_names":["rfcx/tfk-audio"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/rfcx/tfk-audio","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rfcx%2Ftfk-audio","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rfcx%2Ftfk-audio/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rfcx%2Ftfk-audio/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rfcx%2Ftfk-audio/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rfcx","download_url":"https://codeload.github.com/rfcx/tfk-audio/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rfcx%2Ftfk-audio/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29667088,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-20T19:49:36.704Z","status":"ssl_error","status_checked_at":"2026-02-20T19:44:05.372Z","response_time":59,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["audio","audio-analysis","audio-classification","audio-processing","deep-learning","keras","tensorflow","tensorflow2"],"created_at":"2026-02-20T22:21:02.583Z","updated_at":"2026-02-20T22:21:03.268Z","avatar_url":"https://github.com/rfcx.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"tfk-audio package - v1.0.2 \n================\n**T**ensor **F**low **K**eras Audio\n\n**TFK-Audio** is a TensorFlow-based library for audio preprocessing and model training. It provides utilities for converting audio waveforms into spectrograms, creating dataloaders, data augmentation, and integrating audio data with deep learning models. The library is modular, with components for preprocessing (`audio` and `spec`) and model training (`datagen`, `layers`, `labels`, and `metrics`).\n\n---\n\n## Table of Contents\n- [Installation](#installation)\n- [Modules](#modules)\n  - [Preprocessing](#preprocessing)\n    - [Audio](#audio)\n    - [Spec](#spec)\n  - [Model Training](#model-training)\n    - [Datagen](#datagen)\n    - [Layers](#layers)\n    - [Labels and Metrics](#labels-and-metrics)\n- [Contributing](#contributing)\n- [License](#license)\n\n---\n\n## Installation\n\nClone the repository and install the required dependencies:\n\n```bash\ngit clone https://github.com/rfcx/tfk-audio.git\ncd tfk-audio\npip install -r requirements.txt\npip install -e .\n```\n\n---\n\n## Modules\n\n### Preprocessing\n\n#### Audio\n`audio` provides functions for loading and processing audio files.\n```python\n# load a single file, and check audio specs\nwav, sr = audio.load_wav(\"example.wav\", print_audio_specs=True)\n```\n\n#### Spec\n`spec` provides a SpecGenerator class for converting waveforms into spectrograms and managing spectrogram parameters throughout the workflow.\n```python\n# create a spectrogram generator\nspecgen = spec.SpecGenerator(\n    sample_rate=sr,\n    stft_window_seconds=0.05,\n    stft_hop_seconds=0.01,\n    db_limits=(None, None),\n    sample_seconds=2.0\n)\nspec = specgen.wav_to_spec(wav)\n# process all .wav files in a folder\nspecgen.process_folder(indir=\"data/wav\", outdir=\"data/spectrogram\", limit=None)\n# check examples for a specific class\nspecgen.plot_examples(path=\"data/spectrogram/chainsaw\")\n# save and load spectrogram generator parameters\nspecgen.to_json(\"data/demo_specgen.json\")\nspecgen.from_json(\"data/demo_specgen.json\")\n```\n\n---\n\n### Model Training\n\n#### Datagen\n`datagen` provides utilities for efficient spectrogram data loading and augmentation using TensorFlow datasets.\n```python\n# get list of spectrogram file paths and label map\n# also supports creating dataset partitions and resampling classes\nfiles_train, _, _, label_map = datagen.get_files_and_label_map(\"data/spectrogram/\")\n# save the spectrograms and labels as TFRecord files\ntfrecord_files = datagen.create_tfrecords(\n    files=files_train,\n    labels=labels_train,\n    outdir=\"data/tfrecords/\",\n    batch_size=10,\n    overwrite=True\n)\n# create a TF Dataset with augmentation\ndataset = datagen.spectrogram_dataset_from_tfrecords(\n    files=tfrecord_files,\n    image_shape=specgen.image_shape,\n    nclass=len(label_map),\n    batch_size=10,\n    augment=True,  # Enable data augmentation\n    label_smoothing=0.1  # Apply label smoothing\n)\n```\n\n#### Layers\n`layers` provides TensorFlow-Keras compatible layers for working with spectrogram and waveform inputs and common image classification models.\n```python\n# choose waveform or spectrogram input\n# recommended approach is to train using spectrogram input and \n# change the model input layer for deployment on audio waveform data\nuse_waveform = False  # Set to False if you want to use spectrogram inputs\nif use_waveform:\n    preprocess_layer = WavImageNet(target_shape=(224, 224), spec_params=specgen.get_config())\n    input_shape = (int(specgen.sample_rate * specgen.sample_rate),)\nelse:\n    preprocess_layer = SpecImageNet(target_shape=(224, 224))\n    input_shape = (None, None, 1)  # Spectrogram input shape\n# load a pre-trained ResNet50 model (without the top layer)\nbase_model = ResNet50(weights='imagenet', include_top=False, input_shape=(224, 224, 3))\n# add the preprocessing layer as the head\ninputs = tf.keras.Input(shape=input_shape)\nx = preprocess_layer(inputs)\nx = base_model(x)\nx = GlobalAveragePooling2D()(x)\noutputs = Dense(len(label_map), activation='softmax')(x)  # Example: 10 output classes\nmodel = Model(inputs, outputs)\nmodel.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])\nmodel.summary()\n# _________________________________________________________________\n#  Layer (type)                Output Shape              Param #   \n# =================================================================\n#  input_1 (InputLayer)        [(None, None, None, 1)]   0         \n                                                                 \n#  spec_to_imagenet (Function  (None, 224, 224, 3)       0         \n#  al)                                                             \n                                                                 \n#  resnet50 (Functional)       (None, 7, 7, 2048)        23587712  \n                                                                 \n#  global_average_pooling2d_2  (None, 2048)              0         \n#   (GlobalAveragePooling2D)                                       \n                                                                 \n#  dense_2 (Dense)             (None, 2)                 4098      \n                                                                 \n# =================================================================\n# Total params: 23591810 (90.00 MB)\n# Trainable params: 23538690 (89.79 MB)\n# Non-trainable params: 53120 (207.50 KB)\n# _________________________________________________________________\n```\n\n#### Labels and Metrics\n`labels` and `metrics` provide tools for preparing label arrays of various formats. Supports weak-labeling and masked loss functions.\n```python\n# get labels based on file list\n# supports various label formats\nlabels_train = labels.get_classification_labels(\n    files=files_train, \n    label_map=label_map,\n    label_format='multi-label'\n)\n# wrap a loss function to handle masked (unknown) elements\nmasked_loss = metrics.MaskedLoss(tf.keras.losses.BinaryCrossentropy(), mask_val=-1.0)\n```\n---\n\n## Contributing\nContributions are welcome! Please submit a pull request or open an issue for any bugs or feature requests.\n\n---\n\n## License\nThis project is licensed under the Apache-2.0 license. See the [LICENSE](LICENSE) file for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frfcx%2Ftfk-audio","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frfcx%2Ftfk-audio","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frfcx%2Ftfk-audio/lists"}