Русский
Русский
English
Статистика
Реклама

Csi

Запускаем камеру от телефона, или что делать, когда ничего не получается?

02.07.2020 02:23:39 | Автор: admin


Лет восемь назад работал я в одном а в прочем, не важно где. Делали мы там всякие разные интересные вещи. В том числе занимались системами технического зрения для роботов. Роботы были немного маленькие. И если привод для них маленький сделать не было для нас особой проблемой, то вот сделать миниатюрную цифровую камеру, которая не была бы размером с половину робота, было трудно (когда же мы наконец похороним PAL в таких разработках и везде будет цифра?). Если вам любопытно узнать, чем же всё закончилось, прошу под кат!


Небольшой дисклеймер. С описываемых событий прошло уже достаточно лет, результаты работы не представляют никакого коммерческого интереса (ведь так, товарищ майор?), поскольку повторить полностью сейчас всё это невозможно из-за устаревания элементной базы, теперь можно рассказать, как молодой инженер искал решение проблемы и к чему всё это привело.

Изначально у нас был микропроцессор PXA300, в который втыкался SoC, от тогда еще Aptina, типа MT9D131 (JPEG сразу на параллельном выходе), но всё это потребляло много, а смысла в таком монстре было мало.
Проблема звучала просто робот привязан к компьютеру проводом на 100 мегабит. Оператор должен видеть цветную картинку хотя бы 640х480 в целых 15 FPS. Ставить в него камеру, которая гонит параллельный поток в XScale, в котором потом происходит тупое складывание картинки в буфер и передача кадра по сети, показалось слишком расточительным (ну серьезно, целый линукс на борту только чтобы перекладывать байты из одного интерфейса в другой?). Особенно учитывая целевое разрешение камеры. Нужно было решение проще. Плюс существенные ограничения по габаритам не позволяли поставить даже самый маленький объектив типа М12, он был просто конских размеров вместе с держателем.


Поскольку к описываемому моменту я достаточно поднаторел в разработке систем миниатюрных приводов, необходимость заниматься какой-то камерой немного удручала. Но в то же время неизведанное интриговало. В любом случае, хотелось научиться чему-то новому, особенно учитывая то, что мои предшественники путь, описанный ниже, так и не осилили (правда, тут мог сыграть фактор времени, они занимались этой разработкой парой лет раньше).
В результате творческого поиска меня заинтересовали камеры мобильных телефонов, которые были модульными, стоили как блохи (это выяснилось уже позднее) и теоретически закрывали все наши хотелки. Вопрос был только в том, как такую камеру подключить и получить с неё картинку. Я начал с изучения доступных на рынке мобильных телефонов и конкретно того, какие параметры обеспечивают камеры в них. Сразу стало понятно, что принципиально есть два типа таких камер модули с линзами с гибко-жесткой частью, которые заточены под конкретный конструктив телефона:
,
и модули, вставляющиеся в так называемые кроватки, которые выглядели наиболее перспективно:

реальный модуль,

кроватки на любой вкус.


Также удалось узнать, что есть такая штука как SMIA. Довольно быстро я нашел всю утекшую в сеть документацию на стандарт и стал его изучать. Оказалось, что есть три типоразмера модулей:


Name Length Width Height Option 1 Height Option 2
SMIA65 6.5 mm 6.5 mm 4.6 mm 5.8 mm
SMIA85 8.5 mm 8.5 mm 6.1 mm 7.1 mm
SMIA95 9.5 mm 9.5 mm 7.6 mm 8.6 mm

и по конструктиву нам подходит самый маленький SMIA65.
Поиск нормальных брендовых камер ни к чему адекватному не привел. Искать такую дичь у китайцев я еще не умел, а нормальные европейцы типа ST хоть и заявляли о том, что производят подобные модули (и даже документацию на которые можно было скачать без регистрации и смс), продавать свободно заинтересованной публике не желали. Обращение в наше представительство ST не помогло, и пришлось продолжать копать.


Слава ремонтникам мобильников! Схемы, платы, фотки! У них есть всё. После изучения документации и сопоставления доступных для покупки телефонов и запчастей выбор пал на камеру от Nokia 5250.
Сферическая нокия в вакууме.


Симбиан, все дела. Я даже качал торрентом какие-то дикие исходники этой чудесной операционки, в попытке найти готовый драйвер для камеры. Но, увы, тогда моих способностей на это не хватило. Опять пришлось копать глубже.


Ох, какой же наивный я был. Это сейчас, пройдя весь путь от и до, я понимаю, что можно было существенно сократить время разработки, заказывая нормальные платы на нормальном производстве (правда, с оплатой тогда потенциально были некоторые проблемы, а ручки чесались сделать здесь и сейчас). Когда там появился JLCPCB или PCBWay? А тогда только ЛУТ на фольге, хлорное железо и два дня на всё про всё.
Signal Integrity? Вы делали гигабитные дифпары на двустороннем миллиметровом текстолите из платана лутом? А я делал. Даже импеданс считал.

0.5\0.2.


Ничо, работало (к сожалению, доступа к осциллографу, которым можно было бы посмотреть глазок, у меня не было). Сделал несколько тестовых плат. Намучился с пайкой. Экспериментировал с паяльной маской, даже сделал несколько плат. Одну успешно запорол, пропаяв её при помощи флюса ТАГС (ха-ха, какая ирония. Сейчас на сайте чипдипа написано про остаточное сопротивление. Эх, эту бы надпись тогда). На той плате ничего нормально не работало, даже источники питания. Между дорожками, которые ну никак не могли быть связаны, всегда присутствовало от десятков до сотен килоом. Причем плату после пайки мыл в семи водах. Поначалу я думал, что что-то успешно спалил. Начал отпаивать источники питания и всякую обвязку. Замыкания не проходили. Кончилось всё тем, что отпаял с платы вообще всё. Замыкания остались. Сделал вывод, что дело во флюсе, который затёк под маску и не вымылся вообще ничем. После этого я перестал делать платы с маской сам и паять их с флюсом ТАГС.


Но камера это еще полбеды. Надо же было чем-то принимать последовательный сигнал и разворачивать его в параллельный, чтобы запихнуть в STM32F217 (BlackFin? Не, не слышали. К моменту описываемых событий я прочно состоял в секте стм-оводов и конфигурил клоки через только появившийся экселевский файлик (кубоводы, привет!)). Да-да, четырехсотых стм-ок тогда еще не было (хорошо, хорошо, они только появились), и я успешно использовал кит от стартеркита на двухсотой серии. Опять же в результате длительного поиска и изучения рынка оказалось, что пути ровно два. Либо брать лэттисовскую плисину, для которой был апноут по преобразованию CSI в PCAM (так и не нашел его из 2012 года у себя в архиве, но точно помню, что был такой), либо покупать STSMIA832 (забавно, ST выпилили свою доку на преобразователь с сайта. У них теперь можно только апноутом разжиться.) и учиться паять BGA. Поскольку пайка была мне ближе и знакомство с потрохами плисов не входило в планы, да и сроки откровенно поджимали, я обзавелся несколькими микросхемами и купил готовые переходники с TFBGA25 в DIP (и да, макет был собран на беспаечной макетке и даже как-то работал).
Собственно, схема десериализатора совершенно банальна (не переживайте, ГОСТом тут и не пахнет, с тех пор я научился рисовать схемы посимпатичнее).

Схема, да.


Видите красные площадки? Это площадки подключения переходника из TFBGA25 в DIP.

Плата.


Но вернемся к камере. Чем прекрасна SMIA? Да тем, что поначалу казалось, что всё просто.

Красота же?


Все регистры модулей описаны, как выбрать внутреннюю цепочку тактирования, со всеми необходимыми пре- и постскейлерами, тоже описано.

Такие подробности да в каждый документ бы!


Пока я занимался всем этим, SMIA_Functional_specification_1.0.pdf стал моей настольной брошюркой, зачитанной до дыр.
Но, чу, колченогое подобие драйвера (ах, какое громкое слово для заголовочного файла с несколькими функциями записи-чтения регистров камеры) написано, а в память микроконтроллера почему-то никакие байтики не падают. Хотя модуль через I2C успешно читается и записывается. О, сколько раз я думал, что неправильно сконфигурировал клоки или пропустил какую-то команду. Результата не было. Тогда я подумал, что хватит биться головой об стенку, надо делать что-то адекватное тому тупику, в который я угодил. Откуда я взял камеру? Правильно, из телефона. Телефон умеет показывать видео и делать фотографии с модуля? Умеет. Значит нужно тело на опыты. Драматичная нет история покупки донора для опытов лежит здесь.
Как бы там ни было, самым сложным было подпаяться к клоку и данным с модуля.

Ножки у кроватки под стенками, понимаешь.


Дальше было дело техники снять дамп обмена процессора телефона с камерой и рассмотреть в деталях, что же происходит. В результате некоторых пертурбаций был получен вот такой лог обмена.


Вы тоже заметили строки с вопросиками, которыми я пометил запись непонятно чего непонятно куда (пакеты 45-50)? Эти странные регистры, не описанные в, казалось, незыблемой документации (кто ж знал, что в Manufacturer Specific Registers [0x3000 0x3FFF] тоже надо что-то писать). Ну а дальше всё было очевидно. Пишем это непонятно что в непонятно куда и вуа-ля!


first_picture_ever.png


К сожалению не помню, есть ли тут дебайеризация (хм, J = demosaic(I,'grbg'); подсказывает, что есть) и если есть, то всё ли сделано правильно. Как и на втором кадре:

Камера лежала на боку.


Если повернуть голову набок, то можно прочитать 95% чего-то, рассмотреть рёбра какого-то радиатора, лежавшего на столе, и даже попытаться прочитать пароли на листочках с магнитной доски.
Почему всё такое зеленое? А пёс его знает. Этим вопросом уже занимался нормальный адекватный программист (Миша, привет!), который прикручивал эту систему к LwIP и проклинал меня за маленький объем SRAM и малую скорость 217-го (120МГц всего), который еле успевал перекладывать байты. По его словам, надо было просто правильно выставить усиление цветов каналов.


А дальше было дело техники. Нарисовать нормальную схему:

Ещё одна схема.


И сделать нормальную плату, которая показана на КДПВ.

Плата, да.


В производство, собственно, ушел вариант транслятора на отдельной платке (пришлось дорожки по 75мкм делать), чтобы не удорожать производство материнки, куда это всё напаивалось.


Времени было на всё угрохано больше года. Сейчас это кажется диким и ужасно непродуктивным. Наверняка, есть много людей, проделавших бы подобное за пару месяцев. Но я был один, в коллективе никто таким не занимался, интернеты упорно молчали, совета просить было не у кого. Но опыт есть опыт. Я ни сколько не жалею о потраченном времени. Полученные знания бесценны! Предполагаю, подобным образом можно раскурить многие другие модули, которые всё еще ставятся в телефоны, ведь, по сути, никакой особой магии в них нет. Знай себе записывай правильные байтики в правильные регистры да трассировку корректную делай.


А вы как думаете?

Подробнее..

Перевод Индексы PSI и CSI лучшие метрики для мониторинга работы модели

14.08.2020 18:11:43 | Автор: admin
Представляем вам перевод статьи, опубликованной в блоге towardsdatascience.com.
Ее автор, Juhi Ramzai, рассказала об эффективных методах проверки моделей PSI (индексе стабильности популяции) и CSI (индексе стабильности характеристик).

Изображение предоставлено автором

После выпуска модели в продакшен необходимо проводить регулярный мониторинг ее работы, чтобы убедиться, что модель все еще актуальна и надежна. Ранее я писала пост о валидации модели и мониторинге ее работы, в котором подчеркивала важность этих двух этапов.

А теперь перейдем к основной теме данного поста. Мы узнаем все о PSI (индексе стабильности популяции) и CSI (индексе стабильности характеристик), которые являются одними из самых важных стратегий мониторинга, используемых во многих областях, особенно в сфере оценки кредитных рисков.

Обе эти метрики (и PSI, и CSI) сосредоточены на изменениях в РАСПРЕДЕЛЕНИИ ПОПУЛЯЦИИ.

Основная идея этих метрик заключается в том, что модель прогнозирования лучше всего работает, если данные, использованные для ее обучения, не слишком отличаются от валидационных / OOT (out of time) данных в плане экономических условий, основополагающих допущений, стиля ведения кампании, направленности и т. д.

Например, мы разработали модель прогнозирования показателей оттока пользователей кредитных карт в условиях нормальной экономической ситуации. Затем мы приступили к тестированию этой модели, но уже в условиях экономического кризиса. Вполне возможно, что в этом случае модель не выдаст точный прогноз, поскольку не сможет уловить тот факт, что в разных сегментах дохода распределение популяции могло значительно измениться (и это могло привести к высокому фактическому уровню оттока пользователей). В результате мы получим ошибочные предсказания. Но так как сейчас мы это уже понимаем, то можем перейти к проверке изменений распределения популяции между временем разработки (DEV time) и настоящим временем. Так мы получим ясное представление о том, можно ли полагаться на результаты, предсказанные моделью, или нет. Именно это и показывают важные метрики мониторинга PSI и CSI.

Индекс стабильности популяции (PSI)


Эта метрика позволяет измерить то, насколько переменная изменилась в распределении между двумя выборками с течением времени. Она широко используется для мониторинга изменений характеристик популяции и диагностики возможных проблем с эффективностью модели. Если модель перестала делать точные прогнозы из-за значительных изменений в распределении популяции, то часто это является хорошим показателем.

Приведенное выше определение как нельзя лучше объяснено в данной исследовательской работе. Я также привела ссылку на него в конце этого поста.

Изначально индекс стабильности популяции (PSI) был разработан для мониторинга изменений в распределении между внеплановыми выборками (ООТ) и выборками периода времени разработки при оценке кредитных рисков. В настоящее время использование индекса PSI стало более гибким по своей природе, что позволяет исследовать изменения как распределений, связанных с атрибутами модели, так и популяций в целом, включая зависимые и независимые переменные CSI. Мы рассмотрим это в следующем разделе.

Индекс PSI отражает тенденцию к изменению популяции в целом, в то время как индекс CSI обычно сосредоточен на используемых индивидуальных переменных модели.


Источник

Изменение в распределении популяции может быть связано:

  • с изменениями в экономической среде, такими как экономический кризис, COVID-19 и т. д.;
  • изменениями в источниках данных;
  • изменениями во внутренней политике, которые прямо или косвенно влияют на распределение популяции;
  • проблемами с интеграцией данных, которые могут привести к ошибкам в данных;
  • проблемами при программировании/кодировании, такими как реализация модели или пропуск некоторых важных этапов в коде оценки качества работы модели.

Поскольку изменение распределения не обязательно должно сопровождаться изменением зависимой переменной, индекс PSI также можно использовать для изучения сходства/различия между любыми выборками. Например, для сравнения уровня образования, дохода и состояния здоровья двух или нескольких популяций в социально-демографических исследованиях.

ШАГИ ДЛЯ РАСЧЕТА ИНДЕКСА PSI (Ссылка)

  1. Сортируем оцениваемую переменную по убыванию в оцениваемой выборке.
  2. Разделяем данные на 10 или 20 групп (дециль).
  3. Рассчитываем процент записей в каждой группе на основании оцениваемой выборки.
  4. Рассчитываем процент записей в каждой группе на основании выборки разработки.
  5. Рассчитываем разницу между шагами 3 и 4.
  6. Берем натуральный логарифм (Шаг 3 / Шаг 4).
  7. Умножаем шаг 5 на шаг 6.

ТАБЛИЦА EXCEL ИНДЕКСА PSI:

Изображение предоставлено автором

ПРАВИЛА ТОЛКОВАНИЯ (Ссылка)

  1. Индекс PSI < 0,1 без изменений. Вы можете продолжить использование существующей модели.
  2. Индекс PSI >= 0,1, но меньше 0,2 требуются небольшие изменения.
  3. PSI >= 0,2 требуются значительные изменения. В идеале модель больше не должна использоваться. Ее следует обучить заново / заменить другой.

Также можно использовать условный диапазон форматирования красную, желтую и зеленую зоны (Red-Amber-Green zone). Красный цвет тревожное состояние, при котором индекс PSI составляет более 20%, желтый это 1020%, при этом модель должна находиться под наблюдением, а зеленый это этап, на котором модель считается пригодной для использования, т. е. < 10%.

Теперь, исходя из варианта использования, эти пороговые значения корректируются в соответствии с актуальностью для бизнеса, но идея остается прежней следить за изменениями в популяции.

Индекс стабильности характеристик (CSI)


Эта характеристика отвечает на вопрос, какая именно переменная вызывает изменения в распределении популяции. Она сравнивает распределение независимой переменной в наборе оцениваемых данных с набором данных с этапа разработки, а также обнаруживает изменения в распределении входных переменных, которые оцениваются с течением времени.

Это помогает определить, какая изменяющаяся переменная в основном вызывает изменение метрик качества модели.


Когда эффективность модели ухудшается, проверка изменений в распределении переменных модели может помочь выявить возможные причины этого. Как правило, это делается после проверки, в результате которой выяснилось, что индекс PSI не находится в зеленой зоне (< 0,1 в целом). Таким образом можно проверить, какие переменные в основном задают распределение популяции.

Если хотя бы одна переменная значительно изменилась или если показатели нескольких переменных немного изменились, возможно, пришло время обучить модель заново или заменить ее другой.

При вычислении индекса CSI предпринимаются те же действия, что и при вычислении индекса PSI. Разница лишь в том, что решение принимается на основе значений выборки с этапа разработки для конкретной переменной (путем разбиения их на диапазоны и установки пределов этих значений в качестве пороговых значений). Затем при вычислении значений частот для любой валидационной / внеплановой (ООТ) выборки просто применяются те же пороговые значения к данным и вычисляются значения частоты (при помощи той же формулы, которую мы использовали при вычислении индекса PSI).

ТАБЛИЦА EXCEL ИНДЕКСА CSI


Изображение предоставлено автором

Таким образом, индекс PSI может помочь определить расхождения в распределениях популяций в целом, если они значительны, а индекс CSI может помочь еще больше сузить их до нескольких ответственных за это переменных.

Ссылка на исследование
Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru