Russian Qt Forum

Qt => Общие вопросы => Тема начата: tux от Март 10, 2020, 22:22



Название: Android скриншоты
Отправлено: tux от Март 10, 2020, 22:22
Доброго времени суток!
Понадобилось делать скриншоты с экрана смартфона с целью анализировать их на компьютере.
Не проблема: с помощью QProcess и кода
Код:
adb exec-out screencap -p
получаю скриншот, всё ОК.
Но вот беда - на 1 снимок уходит больше 2 секунд. А хотелось бы хотя бы 4 кадра в секунду.
Как это можно сделать?
Телефон не рутованный, ставить какие-то дополнительные программы на него не хотелось бы.


Название: Re: Android скриншоты
Отправлено: kambala от Март 11, 2020, 00:14
можно запустить несколько процессов параллельно


Название: Re: Android скриншоты
Отправлено: tux от Март 11, 2020, 01:54
Даже если это и получится (я проверю, конечно), то рассинхронизация в те же 2+ секунд никуда не денется. Самый первый то кадр всё равно придёт через 2+ секунд...
Хитрее надо как то.


Название: Re: Android скриншоты
Отправлено: kambala от Март 11, 2020, 11:24
а если прямо из консоли выполнять эту команду, то нет задержки?


Название: Re: Android скриншоты
Отправлено: tux от Март 11, 2020, 11:33
Есть, конечно. 2 секунды - достаточный срок, чтобы видеть даже "на глаз".


Название: Re: Android скриншоты
Отправлено: kambala от Март 11, 2020, 13:44
значит, дело не в QProcess :)


Название: Re: Android скриншоты
Отправлено: qate от Март 11, 2020, 14:02
если делать screencap в сыром виде и не передавать по adb линку, то будет быстрее
если это медленно - надо искать замену screencap




Название: Re: Android скриншоты
Отправлено: tux от Март 11, 2020, 14:32
если делать screencap в сыром виде и не передавать по adb линку, то будет быстрее
Вы про "создать скриншот внутри телефона и наружу передать файл"? Я так делал - выгода разве что в экономии около 0.5 секунд, убыток - в том, что можно довольно быстро затереть флешку телефона. Screencap то выдаёт картинку в бинарном виде, которую можно на компьютере просто создавать в /dev/shm
А какая может быть замена screencap?


Название: Re: Android скриншоты
Отправлено: qate от Март 11, 2020, 15:55
1. можно хранить последние 100 от screencap (срипт должен чистить). а забирать потом
2. альтернативой может быть или имеющиеся скриншоттеры из gplay или свой написать )
2.1 даже используя быстрый скриншотер может быть затык в передачи png-файла по adb или wifi



Название: Re: Android скриншоты
Отправлено: tux от Март 11, 2020, 16:35
1) Хранить X скриншотов и забирать их потом - всё равно будет задержка получения первого скришнота.
2) Написать свой - может быть вполне вариант, только я вряд ли без рута смогу получить доступ к фреймбуферу
3) Так затык и есть. В передаче хоть сырых данных, хоть в виде png

Или всё таки можно до фреймбуфера без рута добраться?
P.S. Есть ещё один вариант, конечно - использовать внешнюю web-камеру


Название: Re: Android скриншоты
Отправлено: qate от Март 11, 2020, 17:02
вроде есть скришотеры без рута на gplay, но проверять не буду и не смогу т.к. рут у меня есть




Название: Re: Android скриншоты
Отправлено: tux от Март 11, 2020, 21:01
вроде есть скришотеры без рута на gplay, но проверять не буду и не смогу т.к. рут у меня есть
Та даже если и есть - что с того? Ставить что-то дополнительное на смартфон я не хочу, о чём и говорил в начале темы. Вопрос о фреймбуфере был чисто любопытным.
Пока что, вариант съёма скриншотов без установки дополнительных программ и без тормозов остаётся только web-камера.
Но, есть надежда, что кто-то что-то подскажет...


Название: Re: Android скриншоты
Отправлено: kambala от Март 11, 2020, 22:11
а в чем состоит глобальная задача? может можно придумать другой подход?


Название: Re: Android скриншоты
Отправлено: tux от Март 11, 2020, 23:01
а в чем состоит глобальная задача? может можно придумать другой подход?
Задача - простая. Имитировать человека, не прибегая ко всяким дополнительным программам на устройстве.
Попробую обьяснить. Лет 5 назад была подобная задача, правда на компьютере (for fun) - есть некое графическое приложение (сама ОС в данном случае не важна). Нужно в определенный момент времени кликать в определенной области экрана. Для чего - не так важно.
В результате получился небольшой компьютер с камерой, смотрящей на экран другого компьютера. Было реализовано распознавание целей с помощью OpenCV. Сам "клик" реализовывался с помошью "ардуинки" (то, что было на тот момент), которая "притворялась" мышью. Управление оной осуществлялась через UART. Естественно, добавлялись разные случайные задержки и случайно "сбивались" координаты клика. Само графическое приложение, естественно, ничего подозрительного не заметило.
Теперь захотелось что-то подобное сделать на андроиде, только без камеры...


Название: Re: Android скриншоты
Отправлено: qate от Март 12, 2020, 08:59
почему запрет установить стороннею быструю программу скриншотера (или написать свою) так принципиален ?


Название: Re: Android скриншоты
Отправлено: tux от Март 12, 2020, 11:32
почему запрет установить стороннею быструю программу скриншотера (или написать свою) так принципиален ?
Потому что медленно это. Они ведь все рассчитаны на однократный снимок, причём с управлением от пальца. Если писать свою - тоже быстрее не выйдет, чем то, что я описывал в первом посте.
Подумалось за передачу потокового видео от смартфона на комп, но тут пока я не знаю, можно ли это и как сделать...


Название: Re: Android скриншоты
Отправлено: qate от Март 12, 2020, 12:29
1. А надо ли передавать снимки на комп, может сделать обработку и клики сразу на андроиде ?
2. Как клики  планировалось делаться от внешнего компа ?


Название: Re: Android скриншоты
Отправлено: kambala от Март 12, 2020, 12:48
стримить экран на комп должно быть реально (во всяком случае, для макос есть не одно приложение захвата экрана иос, не считая стандартного макосного QuickTime).

другим вариантом будет написание «демона» для андроида, который будет симулировать нажатия — должно быть реально, ведь исходники андроида открыты.


Название: Re: Android скриншоты
Отправлено: tux от Март 12, 2020, 12:51
1. А надо ли передавать снимки на комп, может сделать обработку и клики сразу на андроиде ?
Что-то я сомневаюсь, что андроид вот так вот просто даст управлять одним приложением из другого.

2. Как клики  планировалось делаться от внешнего компа ?
Через adb. Клик то как раз сделать вообще не проблема, проблема получить быстрый снимок.


Название: Re: Android скриншоты
Отправлено: tux от Март 12, 2020, 12:54
стримить экран на комп должно быть реально (во всяком случае, для макос есть не одно приложение захвата экрана иос, не считая стандартного макосного QuickTime).

другим вариантом будет написание «демона» для андроида, который будет симулировать нажатия — должно быть реально, ведь исходники андроида открыты.
Да, посмотрел. Для андроида тоже есть. На гитхабе. В исходниках.
Но, хотелось бы вообще без установок сторонних приложений на смартфон.


Название: Re: Android скриншоты
Отправлено: qate от Март 12, 2020, 12:54
Что-то я сомневаюсь, что андроид вот так вот просто даст управлять одним приложением из другого.

не управлять, а делать скриншоты

Клик то как раз сделать вообще не проблема, проблема получить быстрый снимок.

без рута, имхо, ничего хорошего не выйдет - input keyevent медленный
https://stackoverflow.com/questions/12079591/android-sendevent-is-really-slow-how-to-speed-it-up


Название: Re: Android скриншоты
Отправлено: tux от Март 12, 2020, 13:02
не управлять, а делать скриншоты
Медленно это. Очень.

без рута, имхо, ничего хорошего не выйдет - input keyevent медленный
https://stackoverflow.com/questions/12079591/android-sendevent-is-really-slow-how-to-speed-it-up
Так я не на пианино собираюсь на андроиде тапать. :)


Название: Re: Android скриншоты
Отправлено: qate от Март 12, 2020, 13:12
если скриншот 2-3 раза в секунду это медленно, то почему не беспокоит медленность sendenevt ?
я то подумал бота надо написать или кликкер )

я бы свою консольную попробовал писать программу, а устанавливать ее и не надо, только adb push

может еще немного о сути задачи инфы ?
вдруг есть иное решение



Название: Re: Android скриншоты
Отправлено: tux от Март 12, 2020, 13:26
если скриншот 2-3 раза в секунду это медленно, то почему не беспокоит медленность sendenevt ?
1 раз в 2 секунды. Т.е. 2000 msec, а надо хотя бы 250 msec.


Название: Re: Android скриншоты
Отправлено: kambala от Март 12, 2020, 14:11
стримить экран на комп должно быть реально (во всяком случае, для макос есть не одно приложение захвата экрана иос, не считая стандартного макосного QuickTime).

другим вариантом будет написание «демона» для андроида, который будет симулировать нажатия — должно быть реально, ведь исходники андроида открыты.
Да, посмотрел. Для андроида тоже есть. На гитхабе. В исходниках.
Но, хотелось бы вообще без установок сторонних приложений на смартфон.
иос не требует установки сторонних приложений для захвата видео с экрана :) просто подключаешь иос устройство к компу и захватывай. Может для андроида тоже так можно?


Название: Re: Android скриншоты
Отправлено: qate от Март 12, 2020, 14:12
1 раз в 2 секунды. Т.е. 2000 msec, а надо хотя бы 250 msec.

на устройстве:
date; c=0; while [ $c -lt 100 ]; do c=$(( $c + 1 )); f=img_$c.raw; echo $f; screencap > $f; done; date
100 скриншотов за 30 сек, без передачи

если нужно быстрее - надо смотреть код screencap - где он там затыкается, возможно лишние проверки или ожидания


Название: Re: Android скриншоты
Отправлено: tux от Март 12, 2020, 14:22
Сырые данные ещё надо преобразовать. RAW ведь не PNG, правда?
Да и какое мне дело до самого устройства? Мне нужно минимум 4 кадра в секуду на компьютере. Без использования какого либо ПО на самом устройстве.
Максимум - это включение режима разработчика.
Хотя, такое чувство, что мне всё это будет проще сделать на малинке или апельсинке...


Название: Re: Android скриншоты
Отправлено: qate от Март 12, 2020, 14:28
Хотя, такое чувство, что мне всё это будет проще сделать на малинке или апельсинке...

т.е. снимать на web камеру, подключенную к внешнему компу, далее анализ и клик через sendenevt ?
наверно это и вариант если на андроид ничего ставить невозможно



Название: Re: Android скриншоты
Отправлено: tux от Март 12, 2020, 14:36
т.е. снимать на web камеру, подключенную к внешнему компу, далее анализ и клик через sendenevt ?
наверно это и вариант если на андроид ничего ставить невозможно
Да. Я выше писал, что я такое уже делал. Правда для обычного компа.
В случае с андроидом проблема только в необходимости слесарных/столярных работ. В случае с обычным мониторе я просто ставил камеру перед монитором. А тут нужен будет держатель как для камеры, так и для смартфона.