view whisper.xml @ 0:2706ea308f94 draft

planemo upload for repository https://github.com/bgruening/galaxytools/tree/master/tools/whisper commit 65bc65452f0cb44220555d6295106ea525038c70
author bgruening
date Wed, 24 Apr 2024 22:10:03 +0000
parents
children 02fa7b2245e6
line wrap: on
line source

<tool id="whisper" name="Speach to Text" version="@TOOL_VERSION@+galaxy@VERSION_SUFFIX@" profile="20.01" license="MIT">
    <description>
        Transcribe audio or video files to text using the OpenAI Whisper
    </description>
    <macros>
        <token name="@TOOL_VERSION@">20231117</token>
        <token name="@VERSION_SUFFIX@">0</token>
    </macros>
    <requirements>
        <container type="docker">quay.io/galaxy/whisper:20231117</container>
    </requirements>
    <command detect_errors="exit_code"><![CDATA[
        mkdir -p ./outs ./models &&
        ln -s '$infile' ./input.${infile.ext} &&
        whisper ./input.${infile.ext}
        --model $model
        --output_dir ./outs
        --threads \${GALAXY_SLOTS:-2}
        --task transcribe
        --output_format all
        --verbose False
        --model_dir \${OPENAI_WHISPER_MODEL_DIR:-./models}
        #if str($language).strip():
            --language '$language'
        #end if
        #if $advanced.temperature:
            --temperature '$temperature'
        #end if
        #if $advanced.best_of:
            --best_of '$advanced.best_of'
        #end if
        #if $advanced.beam_size:
            --beam_size '$advanced.beam_size'
        #end if
        #if $advanced.patience:
            --patience '$advanced.patience'
        #end if
        #if $advanced.length_penalty:
            --length_penalty '$advanced.length_penalty'
        #end if
        #if $advanced.suppress_tokens:
            --suppress_tokens '$advanced.suppress_tokens'
        #end if
        #if str($advanced.initial_prompt).strip():
            --initial_prompt '$advanced.initial_prompt'
        #end if
        #if $advanced.condition_on_previous_text:
            --condition_on_previous_text '$advanced.condition_on_previous_text'
        #end if
        #if $advanced.temperature_increment_on_fallback:
            --temperature_increment_on_fallback '$advanced.temperature_increment_on_fallback'
        #end if
        #if $advanced.compression_ratio_threshold:
            --compression_ratio_threshold '$advanced.compression_ratio_threshold'
        #end if
        #if $advanced.logprob_threshold:
            --logprob_threshold '$advanced.logprob_threshold'
        #end if
        #if $advanced.no_speech_threshold:
            --no_speech_threshold '$advanced.no_speech_threshold'
        #end if
        #if $advanced.word_timestamps.word_timestamps == "True":
            --word_timestamps '$advanced.word_timestamps.word_timestamps'
            #if $advanced.word_timestamps.highlight_words:
                --highlight_words '$advanced.word_timestamps.highlight_words'
            #end if
            #if $advanced.word_timestamps.max_line_width:
                --max_line_width '$advanced.word_timestamps.max_line_width'
            #end if
            #if $advanced.word_timestamps.max_line_count:
                --max_line_count '$advanced.word_timestamps.max_line_count'
            #end if
            #if $advanced.word_timestamps.max_words_per_line:
                --max_words_per_line '$advanced.word_timestamps.max_words_per_line'
            #end if
        #end if
        ]]>
    </command>
    <environment_variables>
        <!-- we will disable the progress bar which is printed to stderr -->
        <environment_variable name="TQDM_DISABLE">1</environment_variable>
    </environment_variables>
    <inputs>
        <param name="infile" type="data" format="wav,mp3,mkv,flv,mpg,ogg,wma,mp4" label="Select audio or video file" />
        <param argument="--model" type="select" label="Speech to Text Model">
            <option value="tiny">Tiny (~32x faster than the large model)</option>
            <option value="base">Base (~16x faster than the large model)</option>
            <option value="small" selected="true">Small (~6x faster than the large model)</option>
            <option value="medium">Medium (~2x faster than the large model)</option>
            <option value="large">Large</option>
        </param>
        <param argument="--language" type="select" label="Language">
            <option value="">Auto (detect language)</option>
            <option value="Afrikaans">Afrikaans</option>
            <option value="Albanian">Albanian</option>
            <option value="Amharic">Amharic</option>
            <option value="Arabic">Arabic</option>
            <option value="Armenian">Armenian</option>
            <option value="Assamese">Assamese</option>
            <option value="Azerbaijani">Azerbaijani</option>
            <option value="Bashkir">Bashkir</option>
            <option value="Basque">Basque</option>
            <option value="Belarusian">Belarusian</option>
            <option value="Bengali">Bengali</option>
            <option value="Bosnian">Bosnian</option>
            <option value="Breton">Breton</option>
            <option value="Bulgarian">Bulgarian</option>
            <option value="Burmese">Burmese</option>
            <option value="Cantonese">Cantonese</option>
            <option value="Castilian">Castilian</option>
            <option value="Catalan">Catalan</option>
            <option value="Chinese">Chinese</option>
            <option value="Croatian">Croatian</option>
            <option value="Czech">Czech</option>
            <option value="Danish">Danish</option>
            <option value="Dutch">Dutch</option>
            <option value="English">English</option>
            <option value="Estonian">Estonian</option>
            <option value="Faroese">Faroese</option>
            <option value="Finnish">Finnish</option>
            <option value="Flemish">Flemish</option>
            <option value="French">French</option>
            <option value="Galician">Galician</option>
            <option value="Georgian">Georgian</option>
            <option value="German">German</option>
            <option value="Greek">Greek</option>
            <option value="Gujarati">Gujarati</option>
            <option value="Haitian">Haitian</option>
            <option value="Haitian Creole">Haitian Creole</option>
            <option value="Hausa">Hausa</option>
            <option value="Hawaiian">Hawaiian</option>
            <option value="Hebrew">Hebrew</option>
            <option value="Hindi">Hindi</option>
            <option value="Hungarian">Hungarian</option>
            <option value="Icelandic">Icelandic</option>
            <option value="Indonesian">Indonesian</option>
            <option value="Italian">Italian</option>
            <option value="Japanese">Japanese</option>
            <option value="Javanese">Javanese</option>
            <option value="Kannada">Kannada</option>
            <option value="Kazakh">Kazakh</option>
            <option value="Khmer">Khmer</option>
            <option value="Korean">Korean</option>
            <option value="Lao">Lao</option>
            <option value="Latin">Latin</option>
            <option value="Latvian">Latvian</option>
            <option value="Letzeburgesch">Letzeburgesch</option>
            <option value="Lingala">Lingala</option>
            <option value="Lithuanian">Lithuanian</option>
            <option value="Luxembourgish">Luxembourgish</option>
            <option value="Macedonian">Macedonian</option>
            <option value="Malagasy">Malagasy</option>
            <option value="Malay">Malay</option>
            <option value="Malayalam">Malayalam</option>
            <option value="Maltese">Maltese</option>
            <option value="Mandarin">Mandarin</option>
            <option value="Maori">Maori</option>
            <option value="Marathi">Marathi</option>
            <option value="Moldavian">Moldavian</option>
            <option value="Moldovan">Moldovan</option>
            <option value="Mongolian">Mongolian</option>
            <option value="Myanmar">Myanmar</option>
            <option value="Nepali">Nepali</option>
            <option value="Norwegian">Norwegian</option>
            <option value="Nynorsk">Nynorsk</option>
            <option value="Occitan">Occitan</option>
            <option value="Panjabi">Panjabi</option>
            <option value="Pashto">Pashto</option>
            <option value="Persian">Persian</option>
            <option value="Polish">Polish</option>
            <option value="Portuguese">Portuguese</option>
            <option value="Punjabi">Punjabi</option>
            <option value="Pushto">Pushto</option>
            <option value="Romanian">Romanian</option>
            <option value="Russian">Russian</option>
            <option value="Sanskrit">Sanskrit</option>
            <option value="Serbian">Serbian</option>
            <option value="Shona">Shona</option>
            <option value="Sindhi">Sindhi</option>
            <option value="Sinhala">Sinhala</option>
            <option value="Sinhalese">Sinhalese</option>
            <option value="Slovak">Slovak</option>
            <option value="Slovenian">Slovenian</option>
            <option value="Somali">Somali</option>
            <option value="Spanish">Spanish</option>
            <option value="Sundanese">Sundanese</option>
            <option value="Swahili">Swahili</option>
            <option value="Swedish">Swedish</option>
            <option value="Tagalog">Tagalog</option>
            <option value="Tajik">Tajik</option>
            <option value="Tamil">Tamil</option>
            <option value="Tatar">Tatar</option>
            <option value="Telugu">Telugu</option>
            <option value="Thai">Thai</option>
            <option value="Tibetan">Tibetan</option>
            <option value="Turkish">Turkish</option>
            <option value="Turkmen">Turkmen</option>
            <option value="Ukrainian">Ukrainian</option>
            <option value="Urdu">Urdu</option>
            <option value="Uzbek">Uzbek</option>
            <option value="Valencian">Valencian</option>
            <option value="Vietnamese">Vietnamese</option>
            <option value="Welsh">Welsh</option>
            <option value="Yiddish">Yiddish</option>
            <option value="Yoruba">Yoruba</option>
        </param>
        <param argument="--output_format" type="select" label="Output Format" multiple="true">
            <option value="txt" selected="true">Text</option>
            <option value="json">JSON</option>
            <option value="srt">SubRip</option>
            <option value="vtt">WebVTT</option>
            <option value="tsv">Tab-separated values</option>
        </param>
        <section name="advanced" title="Advanced Options">
            <param argument="--temperature" type="integer" value="0" optional="true" label="Temperature" help="Temperature to use for sampling" />
            <param argument="--best_of" type="integer" value="5" optional="true" label="Best of" help="Number of candidates when sampling with non-zero temperature" />
            <param argument="--beam_size" type="integer" value="5" optional="true" label="Beam size" help="Number of beams in beam search, only applicable when temperature is zero" />
            <param argument="--patience" type="float" value="" optional="true" label="Optional patience value to use in beam decoding" help="As in https://arxiv.org/abs/2204.05424, the default (1.0) is equivalent to conventional beam search" />
            <param argument="--length_penalty" type="float" value="" optional="true" label="Optional token length penalty coefficient (alpha)" help="As in https://arxiv.org/abs/1609.08144, uses simple length normalization by default" />
            <param argument="--suppress_tokens" type="integer" value="-1" optional="true" label="Suppress tokens" help="Comma-separated list of token ids to suppress during sampling; -1 will suppress most special characters except common punctuations" />
            <param argument="--initial_prompt" type="text" value="" optional="true" label="Initial prompt" help="Optional text to provide as a prompt for the first window" />
            <param argument="--condition_on_previous_text" type="boolean" truevalue="True" falsevalue="False" checked="true" optional="true" label="Condition on previous text" help="If True, provide the previous output of the model as a prompt for the next window; disabling may make the text inconsistent across windows, but the model becomes less prone to getting stuck in a failure loop" />
            <param argument="--temperature_increment_on_fallback" type="float" value="0.2" optional="true" label="Temperature increment on fallback" help="Temperature to increase when falling back when the decoding fails to meet either of the thresholds below" />
            <param argument="--compression_ratio_threshold" type="float" value="2.4" optional="true" label="Compression ratio threshold" help="If the gzip compression ratio is higher than this value, treat the decoding as failed" />
            <param argument="--logprob_threshold" type="float" value="-1.0" optional="true" label="Logprob threshold" help="If the average log probability is lower than this value, treat the decoding as failed" />
            <param argument="--no_speech_threshold" type="float" value="0.6" optional="true" label="No speech threshold" help="If the probability of the |nospeech| token is higher than this value AND the decoding has failed due to `logprob_threshold`, consider the segment as silence" />
            <conditional name="word_timestamps">
                <param argument="--word_timestamps" type="select" label="Extract word timestamps?" help="(experimental) Extract word-level timestamps and refine the results based on them">
                    <option value="False">False</option>
                    <option value="True">True</option>
                </param>
                <when value="True">      
                    <param argument="--highlight_words" type="boolean" truevalue="True" falsevalue="False" value="False" optional="true" label="Highlight words" help="Underline each word as it is spoken in srt and vtt" /> 
                    <param argument="--max_line_width" type="integer" value="" optional="true" label="Max line width" help="The maximum number of characters in a line before breaking the line" /> 
                    <param argument="--max_line_count" type="integer" value="" optional="true" label="Max line count" help="The maximum number of lines in a segment" /> 
                    <param argument="--max_words_per_line" type="integer" value="" optional="true" label="Max words per line" help="No effect with --max_line_width. the maximum number of words in a segment" /> 
                </when>
                <when value="False">
                </when>
            </conditional>
        </section>
    </inputs>
    <outputs>
        <data name="output_txt" format="txt" from_work_dir="./outs/input.txt" label="${tool.name} on ${on_string}.txt">
            <filter>'txt' in output_format</filter>
        </data>
        <data name="output_json" format="json" from_work_dir="./outs/input.json" label="${tool.name} on ${on_string}.json">
            <filter>'json' in output_format</filter>
        </data>
        <data name="output_srt" format="txt" from_work_dir="./outs/input.srt" label="${tool.name} on ${on_string}.srt">
            <filter>'srt' in output_format</filter>
        </data>
        <data name="output_vtt" format="txt" from_work_dir="./outs/input.vtt" label="${tool.name} on ${on_string}.vtt">
            <filter>'vtt' in output_format</filter>
        </data>
        <data name="output_tsv" format="tabular" from_work_dir="./outs/input.tsv" label="${tool.name} on ${on_string}.tsv">
            <filter>'tsv' in output_format</filter>
        </data>
    </outputs>
    <tests>
        <test expect_num_outputs="1">
            <param name="infile" value="english.wav" ftype="wav"/>
            <param name="model" value="tiny"/>
            <param name="language" value="English"/>
            <param name="output_format" value="txt"/>
            <output name="output_txt" file="transcribe.txt"/>
        </test>
        <test expect_num_outputs="3">
            <param name="infile" value="english.wav" ftype="wav"/>
            <param name="model" value="tiny"/>
            <param name="language" value="English"/>
            <param name="output_format" value="srt,tsv,json"/>
            <output name="output_srt" file="transcribe_english.srt"/>
            <output name="output_tsv" file="transcribe_english.tsv"/>
            <output name="output_json">
                <assert_contents>
                    <has_text text="21-year-old Jesus joined Manchester City last year in January 2017 from"/>
                    <has_text text="temperature"/>
                    <has_text text="no_speech_prob"/>
                    <has_text text="English"/>
                    <has_n_lines n="1"/>
                </assert_contents>
            </output>
        </test>
        <test expect_num_outputs="1">
            <param name="infile" value="german.wav" ftype="wav"/>
            <param name="model" value="small"/>
            <param name="language" value="German"/>
            <param name="output_format" value="txt"/>
            <output name="output_txt" file="transcribe_german.txt"/>
        </test>
        <test expect_num_outputs="1">
            <param name="infile" value="german_english.mp3" ftype="mp3"/>
            <param name="model" value="medium"/>
            <param name="output_format" value="txt"/>
            <output name="output_txt" file="transcribe_german_english.txt"/>
        </test>
        <test expect_num_outputs="2">
            <param name="infile" value="persian.wav" ftype="wav"/>
            <param name="model" value="medium"/>
            <param name="language" value="Persian"/>
            <param name="output_format" value="srt,json"/>
            <section name="advanced">
                <param name="condition_on_previous_text" value="False"/>
                <conditional name="word_timestamps">
                    <param name="word_timestamps" value="True"/>
                    <param name="max_words_per_line" value="5"/>
                </conditional>
            </section>
            <output name="output_srt">
                <assert_contents>
                    <has_n_lines n="32"/>
                </assert_contents>
            </output>
            <output name="output_json">
                <assert_contents>
                    <has_text text="\u0628\u0631\u062e\u06cc \u0627\u0632 \u0627\u06cc\u0646"/>
                    <has_text text="temperature"/>
                    <has_text text="no_speech_prob"/>
                    <has_text text="Persian"/>
                    <has_n_lines n="1"/>
                </assert_contents>
            </output>
        </test>
    </tests>
    <help><![CDATA[

.. class:: infomark

**What it does**

Transcribe audio or video files to text using the `Whisper from OpenAI <https://github.com/openai/whisper>`_.

Usage
.....


**Input**
Audio or video file to transcribe in one of wav, mp3, mkv, flv, mpg, ogg, wma, or mp4.


**Output**
Transcribed text in the selected format. The output can be in text, JSON, SubRip, WebVTT, or tab-separated values (tabular) format.
    ]]></help>
    <creator>
        <person givenName="Alireza" familyName="Heidari" url="http://github.com/itisalirh"/>
    </creator>
    <citations>
        <citation type="bibtex">
            @misc{openai2022whisper,
                title={Whisper},
                author={OpenAI},
                year={2022},
                url={https://github.com/openai/whisper}
            }
        </citation>
    </citations>
</tool>