Покажи Публикации - PaperNick
* Виж публикациите на потр. | Виж темите на потр. | Виж прикачените файлове на потр
Страници: [1] 2 3 ... 20
1  Хумор, сатира и забава / Живота, вселената и някакви други глупости / Re: Още извънтемие -: Jul 22, 2024, 19:59
Тензор библиотеките са написани на С, та се съмнявам те да са причната. Както и всички останали библиотеки за Питоня, които изискват повечко бързина. Самия модул за Питона е само обвивка, която да извиква методите.

Всъщност, да, имаш право за питона и обвивката. Сега се сетих причината, @ggerganov искаше да направи бърза CPU inference имплементация на модела, щото оригиналният whisper е бърз само за GPU. Гледам, че в момента бутат също и поддръжка за GPU.

Е, поваля малко и покрай нас. Ама пак е горещо и задушно, маа му стара.

Няма измъкване от тая жега...

2  Хумор, сатира и забава / Живота, вселената и някакви други глупости / Re: Още извънтемие -: Jul 22, 2024, 00:01
Така, за по-просто и за опит, инсталирах първо whisper.
Дръпна една камара библиотеки в процеса.

При първата проба с десет минутно аудио, само̀ си дръпна модела, който му бях посочил, което е дребно и хубаво удобство - medium. Гигабайт и половина.

Но не се получи почти нищо. Имаше някакъв обещаващ старт, но… По някое време целия дисплей замръзва, а аз нищо не мога да направя. Графичната карта е на сто процента натоварена и може би целия ресурс отива за изпълнението на задачката ( което ми хрумна като възможна причина едва сега, докато пиша това ).
Пробвах след това през tty.
Същата работа. Конзолата замръзва и до там. Дали работи нещо отдолу, нямам представа. Никакви странични съобщения.

Графичната ми карта е едва с 6 гига памет, а този модел изисква 5. Би трябвало да стане. На теория.

Опитът със small модел свърши работа в tty. Не съм го пробвал с терминал в графичната среда.

Смахнатото е, че имам 32 гига RAM на лаптопа, която изглежда не учавстваше много. Видях, че май може да се зададе устройство, което да се използва ( например CPU ), но още не съм пробвал. Сигурно ще стане и по-бавно така. Но тази памет поне би влязла в употреба.

Small моделът свърши учудващо добра работа, предвид че в речта на моменти бяха изяждани или сдъвкани звуци - английски акцент. Ползвах аудио, рипнато от видео в Тубата.

Пробвах първо оригиналния whisper, защото изобщо не съм се занимавал до този момент с ИИ.
Видях, че има различни файлови разширения за моделите.

С++ версията на @ggerganov изцяло на този език ли е, ще върви ли по-леко, в същата папка ли трябва да поставя дръпнатите модели ( ~/.cache/whisper ), ако реша да пробвам и това. Защото сигурно ще го направя. Човека е дал достатъчно инструкции, как се инсталира.
Защото искам да пробвам и medium, а защо не и големия модел, ако ми позволи да използвам наличната памет, а не само видео паметта. Тя е недостатъчна за големия модел, а и със средния не се получава засега. Да видя, каква е разликата в точността на текста.

Изглежда си си играл с whisperC++?, а не изключвам и да си самият @ggerganov, но поради някаква причина да говориш за себе с в трето лице  :D

Хаха, де да бях @ggerganov. Реално човекът е решил да пренапише tensor операциите и transformer API-то на c++ за по-голяма скорост и оптизизация на работа, понеже python не е от най-бързите.
Аз досега съм пускал whisper само със CPU, понеже видео картата ми е дърта и не поддържа nvidia cuda, или нещо подобно. Не знам при теб дали бачка GPU-то. Щом ти замръзва машината, предполагам, че превключва на CPU и затова замръзва дори в tty. Ако е така, просто ползвай small.

Относно файловите разширения, @ggerganov е решил да използва ggml binary формата понеже всичко е пакетирано в 1 файл:
https://github.com/ggerganov/whisper.cpp?tab=readme-ov-file#ggml-format

Пробвай whisper.cpp и виж дали ще работи по-ефективно откъм CPU. Доста по-лесно се пуска, единствено трябва да си дръпнеш модела на ръка и да го сложиш в папката whisper.cpp/models
После пробвай с моя помощен скрипт да транскрибираш нещо:
https://gist.github.com/PaperNick/3a6fe78662ea7a1c7cc5c573db348ac1

Ако ти работи бавно, можеш да пробваш с faster-whisper:
https://github.com/SYSTRAN/faster-whisper

И за него имам скрипт (брей много реклама си направих :D)
https://gist.github.com/PaperNick/61cf16f0f1c5735d988c0703c25f3cf2
3  Хумор, сатира и забава / Живота, вселената и някакви други глупости / Re: Още извънтемие -: Jul 19, 2024, 14:16
Мога да отделя някъде към пет гигабайта дисково пространство. Може да се окаже недостатъчно, защото искам три езика да ползвам, та... май ще е проблем.

Мисля, че ще е напълно достатъчно, понеже линуксите си идват със стандартните runtimes за c++. Реално единствено модела ще заеме най-много място. В такъв случай пробвай с medium модела 1.5 GB.

Английското ми произношение сигурно е ужасно. Не съм говорил от доста години.  ;D

Всякакъв акцент лови, толкова е добро, че направо ще те шашне (поне за английски де)

Може и real-time, но не съм го пробвал: https://github.com/ggerganov/whisper.cpp?tab=readme-ov-file#real-time-audio-input-example
4  Хумор, сатира и забава / Живота, вселената и някакви други глупости / Re: Още извънтемие -: Jul 19, 2024, 11:26
Whisper имат читави модели с различни размери, от 77MB - ggml-tiny, до 3.1 GB - ggml-large. Можеш да пробваш с ggml-small - 488MB, ако имаш повечко място ggml-medium 1.53 GB.

Георги Герганов има проект whisper.cpp от който можеш да си го пуснеш:
https://github.com/ggerganov/whisper.cpp

От тук можеш да си свалиш моделите:
https://huggingface.co/ggerganov/whisper.cpp/tree/main
https://github.com/ggerganov/whisper.cpp/blob/master/models/README.md

Преди време си бях написал един прост скрипт, който почва да преобразува към текст без да го интересува формата на файла (щото модела иска wav файлове):
https://gist.github.com/PaperNick/3a6fe78662ea7a1c7cc5c573db348ac1
5  Хумор, сатира и забава / Кошче / Злословие или не -: Dec 11, 2020, 14:16
@samo_za_info, мерси за инфото. Подозирах нещо такова, но се замислих, кой ли клиент би чакал за нещо подобно 1+ година? (темата е създадена Jul 03, 2019, 19:52)
Отделно, услугата на ЧЕЗ е публична и всеки може да я ползва. Явно за всеки влак си има пътници...
6  Програмиране / Web development / Re: Авариите на чез. -: Dec 08, 2020, 22:04
Извинявай но не знам къде да ги добавя в кода.

Няма да стане толкова просто, а и не знам какво точно искаш да постигнеш. CLI програмка ли искаш да си направиш или web страница?
Не мога да отделя повече време по проблема. Надявах се, че разбираш поне малко от програмиране и ще можеш да се оправиш сам след насоките.
7  Програмиране / Web development / Re: Авариите на чез. -: Dec 08, 2020, 16:46
А реално как ще стане със всички ID които има чез. Благодаря предварително

Ми така като гледам, предложенията за градове ги взима от самата HTML без да прави други заявки:
Ако прегледаш изходния код на страницата https://info.cez.bg/js/avarii/av1.php ще видиш всички имена и id-та на ред 249:
Код:
autocompleteData = $.parseJSON('[{"value":"153","label":"СОФИЯ"}.....
8  Програмиране / Web development / Re: Авариите на чез. -: Dec 08, 2020, 15:01
Как мога да го визуализирам в php,  пробвах с това shell-exec не става

Ето едно примерче за София - Перник е с ид 149
Код
GeSHi (Bash):
  1. curl -d "city_id=153&page=1" -X POST https://info.cez.bg/js/avarii/contents.php | grep -oP '<span style="float:left;font-size:small">.*?<\/span>' | sed 's/<[^b][^<>]*>//g'

Не е нужно да използваш shell_exec, просто направи заявката от PHP.
Ето какво сътворих набързо използвайки регулярния израз на колегата:
Код
GeSHi (PHP):
  1. <?php
  2.  
  3. $SOFIA = 153;
  4. $PERNIK = 129;
  5. $NO_BREAKDOWNS_MESSAGE = 'няма прекъсвания на захранването';
  6.  
  7. $requestOptions = [
  8.    'http' => [
  9.        'method'=> 'POST',
  10.        'header' => 'Content-type: application/x-www-form-urlencoded',
  11.        'content' => http_build_query(['city_id' => $SOFIA, 'page' => 1])
  12.    ],
  13. ];
  14.  
  15. $context = stream_context_create($requestOptions);
  16. $fp = fopen('https://info.cez.bg/js/avarii/contents.php', 'r', false, $context);
  17. $pageContent = stream_get_contents($fp);
  18. fclose($fp);
  19.  
  20. if (strpos($pageContent, $NO_BREAKDOWNS_MESSAGE) !== false) {
  21.    echo 'Няма авария' . PHP_EOL;
  22. } else {
  23.    echo 'Има Авария' . PHP_EOL;
  24. }
  25.  
  26. $regionBreakdownPattern = '/<span style="float:left;font-size:small">(.*?)<\/span>/i';
  27. preg_match_all($regionBreakdownPattern, $pageContent, $breakdowns);
  28.  
  29. foreach ($breakdowns[1] as $breakdown) {
  30.    echo $breakdown . PHP_EOL;
  31. }

Голяма част от кода я взех директно от документацията:

В София има авария в момента и ми изкарва това:
Цитат
Има Авария
жк.ХИПОДРУМА<br>СМИЛИЦА
жк.ХИПОДРУМА<br>ХИПОДРУМА
жк.ХИПОДРУМА<br>ПИРИНСКИ ИЗВОР
жк.ХИПОДРУМА<br>КЮСТЕНДИЛ/АТАНАС НЕНОВ/
жк.БАНИШОРА<br>БАНИШОРА
жк.БАНИШОРА<br>ГЕН. СТОЛЕТОВ
жк.БАНИШОРА<br>ИВАН ТУРГЕНЕВ

Edit: разписах го на PHP 7.2
9  Програмиране / Web development / Re: Авариите на чез. -: Nov 19, 2020, 19:11
Днес се присетих за тази тема и по-точно за Selenum. И се сетих, че преди година време чух за поредната му алтернатива. Казва се Cypress – https://www.cypress.io/.

Тогава пича, който я препоръча, каза:

Цитат
Има изключително много възможности за тестване, само че не става за тестване на SalesForce. За всичко друго е супер и много по добре от Selenium според мене.

Бях чувал за Cypress, но не бях цъкал с него досега. Разписах проверките за аварии на ЧЕЗ и се получи доста добре.

Ето и кода:
Код
GeSHi (Javascript):
  1. const CEZ_BREAKDOWNS_URL = 'https://info.cez.bg/js/avarii/av1.php';
  2. const NO_BREAKDOWNS_ASSERT_MESSAGE = 'няма прекъсвания на захранването';
  3.  
  4. const populatedPlaces = [
  5.  { name:'Перник', fullMatch: false },
  6.  { name:'Кюстендил', fullMatch: false },
  7.  { name: 'Буново, общ. Кюстендил', fullMatch: true },
  8. ];
  9.  
  10. describe('CEZ Breakdowns', () => {
  11.  beforeEach(() => {
  12.    // https://docs.cypress.io/api/events/catalog-of-events.html#Examples
  13.    cy.on('uncaught:exception', (err, runnable) => {
  14.      // An "Uncaught ReferenceError: object is not defined" exception is thrown from CEZ webpage.
  15.      // Ignore it so that the execution can continue.
  16.      // Return false to prevent the error from failing the current test.
  17.      return false;
  18.    });
  19.  });
  20.  
  21.  function checkBreakdown(place, fullMatch) {
  22.    it(`should not have any breakdowns for "${place}"`, () => {
  23.      cy.visit(CEZ_BREAKDOWNS_URL);
  24.  
  25.      cy.get('#searchField').type(place);
  26.  
  27.      const searchValue = fullMatch ? place.toUpperCase() : new RegExp(`^${place.toUpperCase()}`);
  28.      const placeSuggestion = cy.get('#suggestions .ui-btn').contains(searchValue, { matchCase: true });
  29.  
  30.      placeSuggestion.should('have.length.greaterThan', 0);
  31.  
  32.      placeSuggestion.click();
  33.  
  34.      cy.get('[data-role="content"] .ui-body').should('contain', NO_BREAKDOWNS_ASSERT_MESSAGE);
  35.    });
  36.  }
  37.  
  38.  populatedPlaces.forEach(place => checkBreakdown(place.name, place.fullMatch));
  39. });
  40.  

Ето и как се пуска:
Код
GeSHi (Bash):
  1. mkdir cez_checker
  2. cd cez_checker/
  3. npm init --yes
  4. npm install cypress --save-dev
  5. echo '{}' > cypress.json
  6. mkdir -p cypress/integration
  7. touch cypress/integration/cez_breakdown_spec.js
  8.  
  9. # Поставете съдържанието на скрипта в "cypress/integration/cez_breakdown_spec.js"
  10.  
  11. npx cypress run --quiet

В браузъра се пуска с:
Код
GeSHi (Bash):
  1. npx cypress open

След изпълнението има дори видео запис :o
Код
GeSHi (Bash):
  1. $ ls cypress/videos/
  2. cez_breakdown_spec.js.mp4

А, да, трябва да инсталирате NodeJS.
10  Linux секция за начинаещи / Настройка на програми / Re: Някой с някакъв опит с LineageOS? -: Aug 22, 2019, 11:24
Не вярвам да стане лесно без  познания по embedded системи и особености на портването lineage os. Аз за това си харесах едно Xiaomi Mi A1 за целта. Нече не ми се занимава или нямам идея как ще протече процеса, но нямам времето и нервите да го правя. Предполагам че мога да мина и с по-малко пари, за някой телефон 2-ра ръка, но пък там си е лотария какво ще уцелиш.
Да, усетих че съм още зелен за тая работа опитвайки се да разбера как ще стане.
И аз ще взема някое телефонче да цъкам, пък след някоя друга година току-виж съм изкарал работещ build.
11  Linux секция за начинаещи / Настройка на програми / Re: Някой с някакъв опит с LineageOS? -: Aug 22, 2019, 09:29
А някой успявал ли е да подкара LineageOS на device, който не се поддържа (не е изброен в техния сайт)?
От няколко месеца се каня да пробвам Lineage и се чудя дали няма да е по-лесно просто да си купя телефон, който се поддържа и да си експериментирам, вместо да се мъча да build-на нещо на ръка (едва ли ще успея)?

Полезна информация stealth, благодаря!
12  Програмиране / Web development / Re: PHP каква е тази конструкция $w['parent']()[0] -: Jul 01, 2019, 20:15
Сигурно вече си се ориентирал и си го тествал, но все пак:

Код
GeSHi (PHP):
  1. <?php
  2.  
  3. $foo = 'test';
  4. $test = ['bar' => ['baz' => 'result']];
  5.  
  6. // Interpreted as ($$foo)['bar'['baz'] in PHP 7. Prints "result".
  7. // This line throws a Warning and Notice in PHP 5
  8. echo $$foo['bar']['baz'];
  9.  
  10. echo PHP_EOL;
  11.  
  12. // Compatible in PHP 5 and 7. Prints "result".
  13. echo ${$foo}['bar']['baz'];
13  Програмиране / Web development / Re: PHP каква е тази конструкция $w['parent']()[0] -: Jun 27, 2019, 16:49
Между другото, във втория линк който пусна за Uniform variable syntax пише, че добавяйки изрично скобички за приоритет си гарантираш еднакво поведение в PHP 5 и 7.
https://wiki.php.net/rfc/uniform_variable_syntax#semantic_differences_in_existing_syntax
14  Програмиране / Web development / Re: PHP каква е тази конструкция $w['parent']()[0] -: Jun 27, 2019, 16:09
Това означава ли че работещ код под PHP 5, например $$foo['bar']['baz'] точно така написан (без допълнителни скоби) може да върне съвсем друг резултат под PHP 7? Ами за останалите три примера ще връща ли различен резултат под PHP 7.
Да, много е вероятно понеже когато ставаше миграята към 7, доста хора се оплакваха, че това им е счупило проектите. И в Wordpress имаше някаква драма, ама вече не помня.

Това ми бърка в мозъка а и нямам php7 да го пробвам.
И аз нямам. Горните примери ги нацъках в един online tool. Използвах този, понеже поддържа доста версии:
http://sandbox.onlinephpfunctions.com/

Ако ми остане време и успея да измисля някакъв пример за $$foo['bar']['baz'], ще тествам и ще пиша.
15  Програмиране / Web development / Re: PHP каква е тази конструкция $w['parent']()[0] -: Jun 22, 2019, 21:24
Variable variable е с два долара:   $$w

----
Код:
$w['parent']()[0]

да не искаш да кажеш че това е името на функцията???
т.е. в $w['parent'] например се съдържа 'my_func'

а $w['parent']() тогава извиква  my_func()

а пък $w['parent']()[0] връща нулевият елемент от резултата на масива на функцията???  my_func()[0]   <---- това вече го разбрах че е новост в php5.4

Шантава работа..Така ли е наистина. Тук нещо понамерих:
https://www.php.net/manual/en/functions.variable-functions.php

ако наистина е така насочването беше успешно [_]3 и си заслужи бирата.

Макар, че go_fire те побутна в правилната посока и се ориентира сам, все пак да потвърдя, че поведението е такова.
Общо взето, както си установил, в PHP 5.4 вкараха "array dereferencing" на методи/функции които връщат нещо.
https://www.php.net/manual/en/migration54.new-features.php

В твоя случай това ще рече, че след извикването на динамичната функция, PHP-то ще последва референцията където се намира масива в паметта и ще достъпи първия елемент.
Преди PHP 5.4 се налагаше резултата от функцията да се присвои на променлива.

Код
GeSHi (PHP):
  1. // PHP 5.3
  2.  
  3. <?php
  4.  
  5. function test_func() {
  6.    return array('Test was called');
  7. }
  8.  
  9. $my_array = array('parent' => 'test_func');
  10. $func_result = $my_array['parent']();
  11. echo $func_result[0];

Код
GeSHi (PHP):
  1. // PHP 5.4
  2.  
  3. <?php
  4.  
  5. function test_func() {
  6.    return ['Test was called'];
  7. }
  8.  
  9. $my_array = ['parent' => 'test_func'];
  10. echo $my_array['parent']()[0];

Готиното на този синтакс е, че ти позволява да навързваш такива извиквания без да се налага да присвояваш резултата на всяка стъпка:
Код
GeSHi (PHP):
  1. $arr['parent']()[0]['child']()[1]
(не трябва да се прекалява обаче, понеже става трудно за четене и дебъгване)


И понеже предвиждам, че точно този синтакс ще ти докара ядове когато мигрираш към PHP 7+ ти пускам тази статия, която показва промените свързани с приоритета на изпълнение на подобни динамични извиквания:
https://www.atlantic.net/hipaa-compliant-cloud-storage/what-is-php7-breaking-changes-php5/
и там секцията "Uniform Variable Syntax".

Ако те мързи да кликаш, това:
Код
GeSHi (PHP):
  1. $atlantic->$dot[‘net’]()
В PHP 5 се изпълнява с този приоритет:
Код
GeSHi (PHP):
  1. $atlantic->{$dot[‘net’]}()
А в PHP 7+ с този:
Код
GeSHi (PHP):
  1. ($atlantic->$dot)[‘net’]()

Забавлявай се ;D
Страници: [1] 2 3 ... 20