Greboca  

Suport technique et veille technologique

Suport technique et veille technologique

Aujourd’hui, les grandes entreprises et administrations publiques hésitent entre continuer à utiliser des logiciels propriétaires ou basculer vers les Logiciels Libres. Pourtant, la plupart des logiciels libres sont capables de bien traiter les données issues des logiciels propriétaire, et parfois avec une meilleur compatibilité.

C’est alors la barrière de la prise en main qui fait peur, et pourtant...

Les logiciels libres

L’aspect « Logiciel Libre » permet une évolution rapide et une plus grande participation des utilisateurs. Les aides et tutoriels foisonnent sur Internet ou sont directement inclus dans le logiciel lui-même.

Enfin, les concepteurs sont plus proches des utilisateurs, ce qui rend les logiciels libres plus agréable à utiliser et conviviaux.

Grâce à la disponibilité des logiciels libres, vous trouverez facilement des services de support techniques et la licence n’est plus un frein à l’utilisation de ces logiciels par votre personnel.

Notre support technique concerne essentiellement les logiciels libres, que ce soit sous forme de services ponctuels ou de tutoriels.

LinuxFr.org : les journaux  -  décrire une une image avec une iA locale

 -  Mai 2024 - 

Aujourd'hui c'est fourien™, petit tuto sans prétention!

Pour décrire des images en utilisant une iA localement j'utilise LLaVA qui fait partie de LLaMA C++ (llama.cpp)

prérequis :

  • créer un dossier image_summary et ses sous dossiers
    mkdir -p image_summary/bin image_summary/models image_summary/data/img image_summary/data/txt

  • créer un venv (j'utilise Python 3.10.6)
    python -m venv ./image_summary/venv/

  • activer l'environnement
    source ./image_summary/venv/bin/activate

  • mettre à jour pip
    pip install --upgrade pip

  • installer les dépendances
    pip install 'glob2==0.7'

  • désactiver l'environnement
    deactivate

  • télécharger le code source de llama.cpp de cette release (llava a été temporairement retiré afin de refactoriser le code)

  • décompresser l'archive du code source dans un répertoire
    mkdir llama.cpp-b2356 && tar -zvxf llama.cpp-b2356.tar.gz --strip-components=1 -C ./llama.cpp-b2356/

  • compiler les binaires de llama.cpp pour avoir llava-cli
    cd llama.cpp-b2356
    cmake -Bbuild # basique CPU + RAM
    cmake -Bbuild -DLLAMA_CUBLAS=ON # pour utiliser CUDA avec une carte NViDiA
    cmake --build build --config Release

  • copier ./build/bin/llava-cli dans image_summary/bin/

  • télécharger les fichiers mmjprog et ggml
    ggml-model-q4_k.gguf (LLM 4Go) et mmproj-model-f16.gguf (la partie multimodale qui "voit" 600Mo) dans image_summary/models/

  • placer ce script python dans image_summary/image_summary.py

# mon ""code"" python avec coloration syntaxique
# (désolé je suis pas un grand codeur j'accepte les pull requests ^^)
from pathlib import Path
import glob
import subprocess
import os

LLAVA_EXEC_PATH = "./bin/llava-cli"
MODEL_PATH = "./models/ggml-model-f16.gguf"
MMPROJ_PATH = "./models/mmproj-model-f16.gguf"

DATA_DIR = "data"
IMAGE_DIR = Path(DATA_DIR, "img")
TXT_DIR = Path(DATA_DIR, "txt")

types = ('*.jpg', '*.png') # the tuple of file types
image_paths = []
for files in types:
        image_paths.extend(sorted(glob.glob(str(IMAGE_DIR.joinpath(files)))))
#print(image_paths)

txt_paths = sorted(glob.glob(str(TXT_DIR.joinpath("*.txt"))))

TEMP = 0.1
## for llava 1.5
PROMPT = "You are an assistant who perfectly describes images."

bash_command = f"{LLAVA_EXEC_PATH} -m {MODEL_PATH} --mmproj {MMPROJ_PATH} --temp {TEMP} -p '{PROMPT}' --ctx-size 0"
#print(bash_command)
# Bash command output
# ./bin/llava-cli -m ./models/ggml-model-f16.gguf --mmproj ./models/mmproj-model-f16.gguf --temp 0.1 -p "Describe the image." --ctx-size 0

for image_path in image_paths:
    image_name = Path(image_path).stem
    image_summary_path = TXT_DIR.joinpath(image_name + ".txt")

    if not os.path.exists(image_summary_path):
        print(f"Processing {image_path}")
        # add input image and output txt filenames to bash command
        bash_command_cur = f"{bash_command} --image '{image_path}' > '{image_summary_path}'"
        print(bash_command_cur)

        # run the bash command
        process = subprocess.Popen(
            bash_command_cur, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE
        )

        # get the output and error from the command
        output, error = process.communicate()

        # commment output and error for less verbose output
#        print("Output:")
#        print(output.decode("utf-8"))

#        print("Error:")
#        print(error.decode("utf-8"))

        # return the code of the command 
        return_code = process.returncode
#        print(f"Return code: {return_code}")
#        print()

        print("Done")

        # clean txt files
        bash_command_sed = f"sed -i '/_/d' '{image_summary_path}' && sed -i '/^[[:space:]]*$/d' '{image_summary_path}'"
        print(bash_command_sed)

        # run the bash command
        process = subprocess.Popen(
            bash_command_sed, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE
        )

        print("txt files cleaned")

    else:
        print(f"Already processed {image_summary_path}")
  • placer 2 ou 3 images dans image_summary/img/ pour tester

  • lancer le script
    ./image_summary/venv/bin/python image_summary.py

  • profit
    dans image_summary/txt/ le résultat, ça prend environ 1 minute par image sur mon processeur i5-12600K (beaucoup moins avec CUDA)

références :
https://github.com/ggerganov/llama.cpp
https://huggingface.co/mys/ggml_tree/main
https://plainenglish.io/community/generate-a-summary-of-an-image-with-an-llm-in-python-0fc069

Commentaires : voir le flux Atom ouvrir dans le navigateur

par i M@N

LinuxFr.org : les journaux

LinuxFr.org : Journaux

Pâques, le bug d'Excel et la difficile adaptation de LibreOffice

 -  25 avril - 

Sommaire Où l'on décide de la date de Pâques Ce cher Jules 1254 ans fast forward Le calendrier julien révisé Bon, et Excel, dans tout ça ? LibreOffice (...)


Sauver des données embarquée à dos d'outarde

 -  8 avril - 

Ou comment l'association GEBULL, petit GUL de province, a contribué à une étude scientifique.À la fin du mois de novembre 2021, une balise de suivi (...)


IA : Imitation Artificielle

 -  28 mars - 

Bonjour Nal',Tout le monde cause de l'IA. L'IA par ci, l'IA par là. L'IA dans les journaux qui trouvent qu'il y a trop d'IA.Ça commence à (...)


Un super Logic Analyzer DIY pour pas cher

 -  26 mars - 

Wouah, le titre cryptique. Un peu de Wikipedia pour éclaircir (j’espère que c'est mieux que ChatGPT):L’analyseur logique est un outil de mesure (...)


Mise a jour de la traduction française du Wiki de Scribus

 -  24 mars - 

Je viens de commencer à mettre à jour la traduction française du Wiki du logiciel de Publication Assistée par Ordinateur (PAO) Scribus (équivalent (...)