인식도 잘되고 하구만

 

 

import requests
import json
from gtts import gTTS
import playsound as ps
import speech_recognition as sr

"""
1. 로컬에 ollama와 llama3.1:8b 설치
2. STT를 ko로 고정
3. TTS를 ko로 고정


[의존성 관련]

pip install gtts
pip install ollama
pip install playsound
pip3 install PyObjC
pip install SpeechRecognition

pip install -U pip
pip install -U pyaudio
"""

def speak_text(text):
    tts = gTTS(text, lang='ko', slow=False)
    tts.save("response.mp3")
    # os.system("mpg321 response.mp3")
    ps.playsound("response.mp3")


def stt():
    r = sr.Recognizer()
    with sr.Microphone() as source:
        print("Say something! : ")
        audio = r.listen(source)

    return r.recognize_google(audio, language='ko-KR')


def ollama_chat(text):
    url = "http://localhost:11434/api/generate"
    data = {
        "model": "llama3.1:8b",
        "prompt": text
    }

    header = {'Content-Type': 'application/json'}

    response = requests.post(url, json=data, headers=header)

    if response.status_code == 200:
        print( response.content.decode().strip().split('\n') )
        json_obj = response.content.decode().strip().split('\n')

        res_data =[json.loads(obj) for obj in json_obj]
        res_text = ''

        for item in res_data:
            res_text += item['response']

        # print(res_text)
        return (True, res_text)

    else:
        # print('Error:', response.status_code, response.text)
        return (False, response.text)

    return (False, '')


if __name__ == "__main__":
    # 음성 입력
    message = stt()
    print('질문: ' , message)

    # 생각 답변
    (status, text) = ollama_chat(message)
    print('답변: ', text)

    # 음성 출력
    speak_text(text)

 

 

 

1. 로컬에 Ollama설치 후 server를 띄우면 이렇게 확인 가능함.

 

2. Python에서 의존성 설치 (venv환경에서 진행)

- 필요에 따른 설치 

pip install gtts
pip install ollama
pip install playsound
pip3 install PyObjC
pip install SpeechRecognition

pip install -U pip
pip install -U pyaudio

 

 

본인은 Windows 11, NVIDIA GPU가 존재하여 아래와 같이 가이드에 따라 설치 및 실행을 해봤으며,

youtube 영상, 녹음 음성등 테스트 해봤으며, 정상적으로 자막 파일이 생성되었다.

 

 

1. 사전 설치

1.1. Whisper WebUI  (아래 5번)에서의 링크 내 가이드에 따른 설치

    - git, python, ffmpeg, CUDA 설치 한다.

    - python, ffmpeg등은 PATH 설정을 한다.

1.2. cuDNN 복사

   - cuDNN Archive (아래 5번) 에서 CUDA와 동일한 버전의 파일을 받은 후 압축을 푼다.

   - bin/, include/, lib/ 디렉토리에 파일을 CUDA와 동일한 경로에 복사한다.

# 본인 기준으로 v12.5

# 받은 위치) C:\tmp\cudnn-windows-x86_64-8.9.7.29_cuda12-archive\bin
# 복사할 위치) C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.5\bin
  cudnn64_8.dll
  cudnn_adv_infer64_8.dll
  cudnn_adv_train64_8.dll
  cudnn_cnn_infer64_8.dll
  cudnn_cnn_train64_8.dll
  cudnn_ops_infer64_8.dll
  cudnn_ops_train64_8.dll

# 다운 경로) C:\tmp\cudnn-windows-x86_64-8.9.7.29_cuda12-archive\include
# 복사할 위치) C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.5\include
  cudnn.h
  cudnn_adv_infer.h
  cudnn_adv_train.h
  cudnn_backend.h
  cudnn_cnn_infer.h
  cudnn_cnn_train.h
  cudnn_ops_infer.h
  cudnn_ops_train.h
  cudnn_version.h
  
# C:\tmp\cudnn-windows-x86_64-8.9.7.29_cuda12-archive\lib\x64
# 복사할 위치) C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.5\lib\x64
  cudnn.lib
  cudnn64_8.lib
  cudnn_adv_infer.lib
  cudnn_adv_infer64_8.lib
  cudnn_adv_train.lib
  cudnn_adv_train64_8.lib
  cudnn_cnn_infer.lib
  cudnn_cnn_infer64_8.lib
  cudnn_cnn_train.lib
  cudnn_cnn_train64_8.lib
  cudnn_ops_infer.lib
  cudnn_ops_infer64_8.lib
  cudnn_ops_train.lib
  cudnn_ops_train64_8.lib

 

2. Whisper WebUI 실행

  - Git에서 Source를 Clone을 한다.

  , Install batch를 실행하면 실행과 venv이 생성된다.

  - venv에서 Start batch를 실행하면 잠시 후  http://127.0.0.1:7860 로 서버가 실행된다.

# 임의 디렉토리 생성
MKDIR C:\tmp
cd C:\tmp

# Source Clone
git clone https://github.com/jhj0517/Whisper-WebUI.git

# Clone된 소스 파일 내 이동
cd Whisper-WebUI

# Run, venv생성
Install.bat

# 서버 실행
start-webui.bat

 

3. 자막 생성 해보기

  Youtube 영상과, 녹음 음성을 시도해 보았다.

 

 

youtube에서 실행시 Progress에 대한 부분이다. (본인 영상이 아니라 스샷을 담지는 못했다)

youtube영상 자막 생성 중

 

아래는 녹음 음성Tab에서 실행한 부분이다.

녹음 음성과 생성된 자막파일(Output)

 

srt 파일 다운로드

 

4. 오류 대처

  자막 생성 중 아래와 같은 메시지가 나온다면 위(1.2) 파일 복사를 않아서 발생하는 부분이다.

  복사 후 Install batch부터 Start batch까지 다시 실행해 보자.

Could not locate cudnn_ops_infer64_8.dll. Please make sure it is in your library path!

 

 

5. 참고

 

  https://github.com/jhj0517/Whisper-WebUI

 

GitHub - jhj0517/Whisper-WebUI: A Web UI for easy subtitle using whisper model.

A Web UI for easy subtitle using whisper model. Contribute to jhj0517/Whisper-WebUI development by creating an account on GitHub.

github.com

 

 

cuDNN Archive

https://developer.nvidia.com/rdp/cudnn-archive

 

cuDNN Archive

Download releases from the GPU-accelerated primitive library for deep neural networks.

developer.nvidia.com

 

.

 

 

mac의 Obsidian에서 사용하기 위해서 설치해 보았다.

 

LM Studio설정도 있지만 Ollama를 사용하는 것을 우선...

 

1. 사전 준비 사항

  - homebrew를 사용하여 ollama를 설치

  - ollma의 model을 다운로드

  - Obsidian을 설치

  

 

2.  Ollama 설치

2.1. Ollama의 Model 선택

   ollama를 실행하여 로컬에 원하는 모델이 없는 경우 다운로드 한다

# 로컬의 모델 목록 조회
$ ollama list

# 원하는 모델 다운로드
$ ollama pull llama2 # llama3

 

2.2. Ollama 서버로 기동

   ollama 서버를 기동은 brew에서 서비스에 등록하는 방법과 

   쉘에서 직접 실행하는 방법 중 원하는 것으로 한다.

# Local Cpilot Setup Guide 에 따른 서버 실행 (CORS 활성화 옵션 추가 된 Command) 
$ OLLAMA_ORIGINS="app://obsidian.md*" ollama serve

# brew로 서비스 등록의 서버 실행
$ brew services start ollama

 

3. Obsidian 설치

 3.1. 커뮤니티 플러그인 활성화

    커뮤니티 플러그인 사용을 활성화 화여 'Copilot'을 사용/활성화 한다.

Copilot 플러그인 설치

 

3.2. Copilot 플러그인 설정

    - Obsidian 앱의 메뉴에서 'Preferences...' (Command + , ) 를 선택하여

       메뉴 좌측 하단에 Copilot을 선택한다.

    - 우측 화면에서 아래쪽으로 스크롤하여

       Ollama가 보이면

       Default is llama2(7b) 의 아래 내용에 위에서 받은 모델을 등록한다.

       Ollama Base URL에 http://localhost:11434를 등록한다.

    - 우측 화면에서 위쪽을 스크롤하여 

       Save and Reload가 보이면 클릭하여 저장과 모델을 사용하게 된다.

Ollama 설정

 

Save and Reload

 

4. Obsidian에서 사용

   -  좌측 메뉴에서 Copilot Chat을 선택하면 우측에 Chat창이 활성화된다.

   - Ollama에 모델로 선택 후 대화를 시도해 본다.

Chat 활성화

 

Ollama 선택 후 Chat

 

 

5. 참고

    https://ollama.com/

 

Ollama

Get up and running with large language models.

ollama.com

 

    https://github.com/logancyang/obsidian-copilot/blob/master/local_copilot.md 

 

obsidian-copilot/local_copilot.md at master · logancyang/obsidian-copilot

A ChatGPT Copilot in Obsidian. Contribute to logancyang/obsidian-copilot development by creating an account on GitHub.

github.com

 

.

 

 
/*********************

  K.C.Y 1993

*********************/
#include <dos.h>
/*
      #*@     #*@
      @@@ --> @@@
      @@@     @@@
*/

void Sprite1(POS, SSEG, SOFF, SXLEN, SYLEN, PG)
unsigned int POS, SSEG, SOFF, SXLEN, SYLEN, PG;
{
   unsigned int Spr, SB;

    Spr=SXLEN*SYLEN;
    SB=80*SYLEN;

 asm push ds
 asm push si

 asm mov ax, 0A000h
 asm mov es, ax
 asm mov ds, SSEG
 asm mov si, SOFF
 asm mov di, PG

 asm mov bx, POS
 asm shr bx, 1
 asm shr bx, 1
 asm add di, bx

 asm mov dx, 03C4h
 asm mov al, 2
 asm mov ah, 00010001b

 asm mov cx, POS
 asm and cx, 3
 asm rol ah, cl

 asm mov cx, SXLEN
    HTAB:
 asm push cx
 asm out dx, ax
 asm mov cx, SYLEN
    VTAB:
 asm mov bl, ds:[si]
 asm cmp bl, 0
 asm je DOT
 asm mov es:[di], bl
    DOT:
 asm add si, SXLEN
 asm add di, 80
 asm loop VTAB
 asm rol ah, 1
 asm cmp ah, 00010001b
 asm jne JUMP
 asm inc di
    JUMP:
 asm sub si, Spr
 asm sub di, SB
 asm inc si
 asm pop cx
 asm loop HTAB

 asm pop si
 asm pop ds
}
 
:
:
:
 

'코드' 카테고리의 다른 글

keyscan  (0) 2023.11.17
WebDAV (FireMonkey)  (0) 2014.06.27
Cam  (0) 2010.08.10
unzip  (2) 2010.08.03
FindWindow  (0) 2010.07.13

/*********************

  K.C.Y 1993

*********************/

#include <dos.h>

void interrupt far (*oldKBD)(void);

unsigned char scancode[128]={
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
};

unsigned char touchcode[128]={
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
};

void interrupt ScanKey()
{
    unsigned char key,key2;

    __emit__(0xFB);
    key = inportb(0x60);

    if (key>127) scancode[key-128]=0;
    else if(!scancode[key]) {
   scancode[key]=1;
   touchcode[key]=1;
 }

    key2 = inportb(0x61);
    key=key2;
    key2=key2 | 0x80;
    outportb(0x61,key2);
    outportb(0x61,key);
    __emit__(0xFA);
    outportb(0x20,0x20);
}

void NewKey()
{
  oldKBD=getvect(0x9);
  setvect(0x9,ScanKey);
  return;
}

void OldKey()
{
  setvect(0x9,oldKBD);
  return;
}


'코드' 카테고리의 다른 글

inline code  (0) 2023.11.17
WebDAV (FireMonkey)  (0) 2014.06.27
Cam  (0) 2010.08.10
unzip  (2) 2010.08.03
FindWindow  (0) 2010.07.13

요약

  - admob을 앱에 추가하기 위한 의존 라이브러리를 추가하기 위해서 POD를 사용, 의존성 관리를 Swift Package Manager를 사용이 필요하게되었음, Xcode에서 해당하는 부분이 어디인지 스샷으로 남기고자 한다.

 

내용

Xcode에서 Swift Package Manager를 설정하기 위한 내용은 아래 링크에 있으면 설명이 잘되어 있다.

참고 링크) https://firebase.google.com/docs/crashlytics/get-started?platform=ios&hl=ko 

 

Firebase Crashlytics 시작하기

Google I/O 2023에서 Firebase의 주요 소식을 확인하세요. 자세히 알아보기 의견 보내기 Firebase Crashlytics 시작하기 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. iO

firebase.google.com

 

설치하는 위치는

이렇게 찾아도 되고

- File > Add Packages...

Add Packages..를 선택

저렇게 찾아도 되고

- TARGETS > General > Framgworks, Libraries, and Embedded Content

아래 + 버튼을 누름
아래 Add Package Dependency... 를 선택

 

SDK저장소 위치 추가 하기

-  저장소 위치를 붙여넣고 Add Package 및 Package Product 선택 App Package를 진행

   ex)  https://github.com/firebase/firebase-ios-sdk

우측 상단에 저장소 위치를 추가

의존성 라이브러리 추가 확인

- Frameworks, Libraries, and Embedded Content에 추가됨

 

 

쉘스크립트 추가는

- TARGETS > Build Phases > Run Script

Run Script

 

 

POD (Podfile)에서 마이그되었다면 sh 실행시 file not found가 보일 것이며,

위 스샷과 같이 "${PODS_ROOT}/FirebaseCrashlytics/run" 이런 것들이 존재하면 제거하면 삭제가 필요하다.

 

끝.

+ Recent posts