LINUX.ORG.RU

Сообщения aido

 

OpenGL/GLUT вывод простой картинки

Форум — Development

Всем привет!

встала задача вывести картинку средствами OpenGL/GLUT без особого использования других библиотек. Не долго думая, получился вот такой код (который рисует белое окно):

#ifdef __APPLE__
#include <GLUT/glut.h>
#else
#include <GL/glut.h>
#endif
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>

GLuint texId;
unsigned char *data;
uint32_t width, height;
void renderScene(void) {

    // Clear Color and Depth Buffers
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    // Reset transformations
    //glLoadIdentity();
    // Set the camera
    glBindTexture  (GL_TEXTURE_2D, texId); // Set as the current texture
    glTexImage2D   (GL_TEXTURE_2D, 0,GL_RGB, width, height, 0, GL_BGR, GL_UNSIGNED_BYTE, data);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
    glBegin(GL_QUADS);
        glTexCoord2d( 0.0,  1.0);   glVertex2d(-1.0, -1.0);
        glTexCoord2d( 0.0,  0.0);   glVertex2d(-1.0,  1.0);
        glTexCoord2d( 1.0,  0.0);   glVertex2d( 1.0,  1.0);
        glTexCoord2d( 1.0,  1.0);   glVertex2d( 1.0, -1.0);
    glEnd();

    glutSwapBuffers();
}

int main(int argc, char **argv) {

    const char* filename=argv[1];
    cv::Mat img = cv::imread(filename);
        width=img.cols;
        height=img.rows;
        data=(unsigned char *)img.data;
    // init GLUT and create window
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);
    glutInitWindowPosition(100,100);
    glutInitWindowSize(320,320);
    glutCreateWindow("Lighthouse3D- GLUT Tutorial");

    // register callbacks
    glutDisplayFunc(renderScene);
    // glutReshapeFunc(renderScene);
    glutIdleFunc(renderScene);

    // enter GLUT event processing cycle
    glutMainLoop();

    return 1;
}

OpenCV здесь чисто для облегчения загрузки картинки и будет позже заменено. В последствии не планируется даже натягивать текстуру на что-то - просто вывод на экран. Вопрос знатокам - что здесь я забыл сделать для вывода картинки?

 ,

aido
()

Ubuntu dpkg arm cross-compile

Форум — Development

Всем привет!

Встала необходимость собрать opencv deb-пакетом из-под убунты amd64 на armhf. Естесственно, оно будет тянуть свои зависимости под другую архитектуру. Сделал, как написано здесь, но не помогло:

$ sudo apt-get install libgcc1:armhf
Чтение списков пакетов… Готово
Построение дерева зависимостей       
Чтение информации о состоянии… Готово
Некоторые пакеты невозможно установить. Возможно, вы просите невозможного,
или же используете нестабильную версию дистрибутива, где запрошенные вами
пакеты ещё не созданы или были удалены из Incoming.
Следующая информация, возможно, поможет вам:

Пакеты, имеющие неудовлетворённые зависимости:
 libgcc1:armhf : Зависит: libc6:armhf (>= 2.4) но он не будет установлен
                 Ломает: libgcc1 (!= 1:4.9.2-10) но 1:6.2.0-5ubuntu12 будет установлен
 libgcc1 : Ломает: libgcc1:armhf (!= 1:6.2.0-5ubuntu12) но 1:4.9.2-10 будет установлен
E: Ошибка, pkgProblemResolver::Resolve сгенерировал повреждённые пакеты. Это может быть вызвано отложенными (held) пакетами.

Их можно поставить в другое место, чтобы конфликтов не было?

Ставить из родного распбиановского репозитория - не вариант, так как мне нужно сделать кастомную сборку.

 , , ,

aido
()

QT+OpenGL+OpenCV Memory Leak

Форум — Development

Всем привет!

QT5.8, OpenCV 3.2

Решил написать плеер, в котором было бы на одном окне два QOpenGLWidget. При загрузке в GRAM текстур (cv::ogl::Texture2D::copyFrom), начинает дико течь память, если есть два виджета, и нет течи, если один виджет. Оба виджета живут независимой жизнью (по отдельному инитят OpenGL, имеют свои слоты и т.д.).

Интересно, что при комментировании обращения именно к copyFrom, протечка пропадает.

Из-за чего такое может быть?

 , , ,

aido
()

Qt+Cuda без пинг-понга

Форум — Development

Всем привет!

Как напрямую отрисовывать cv::cuda::GpuMat в QPainter? Я знаю способ с QImage, но это перекидывание обратно в CPU и затем обратно в видеопамять, чего не хочется. Посмотрел QPixmap - по ходу он не умеет инититься из GPU.

С QImage делаю примерно вот так:

QLabel* region;
Mat src;
QImage img;
Mat RGBframe;
if (m.channels()== 3)
{
    cv::cvtColor(src, RGBframe, CV_BGR2RGB);
    img = QImage((const unsigned char*)(RGBframe.data),
          RGBframe.cols,RGBframe.rows,QImage::Format_RGB888);
}
else
{
    img = QImage((const unsigned char*)(src.data),
                src.cols,src.rows,QImage::Format_Indexed8);
}
QPainter p(region);
p.drawImage(0,0,img);
p.end();

 , ,

aido
()

RTSP CUDA opencv streaming

Форум — Development

Всем привет!

Понадобилось нативно включить в opencv поддержку rtsp потока в формате h264 при помощи ffmpeg+cuda. Версия 3.2.4 его нормально тянет и хочется минимумом телодвижений сделать то же в OpenCV. нашел в modules/videoio/src/cap_ffmpeg_impl.hpp строчку, которая включает поддержку rtsp по tcp и хотел туда же вставить -hwaccel cuvid, но после этого opencv отказалась собираться. Есть ли в сети патчи, которые умеют правильно отображать видео в связке (OpenCV+FFMpeg+Cuda+RTSP+H264)?

 , ,

aido
()

OpenCV 3.2+Cuda 8.0

Форум — Development

Всем привет!

Кто-нибудь пробовал собирать OpenCV 3.2 с поддержкой Cuda 8.0 (карточка - nvidia gtx 1070)?

У меня заканчивается на ошибке:

cmake CMAKE_BUILD_TYPE=RELEASE -DCMAKE_CXX_COMPILER=g++-5 -DCMAKE_CC_COMPILER=gcc-5 -DCMAKE_CXX_FLAGS="${CMAKE_CXX_FLAGS} -std=c++11" -D WITH_CUDA=ON -D ENABLE_FAST_MATH=1 -D CUDA_FAST_MATH=1 -D WITH_CUBLAS=1 -D CMAKE_INSTALL_PREFIX=/usr -D WITH_TBB=ON WITH_FFMPEG=ON -D WITH_GSTREAMER=OFF -D WITH_OPENGL=ON .. && make -j6

blablabla

[ 36%] Built target pch_Generate_opencv_superres
In file included from /usr/local/cuda-8.0/include/cuda_runtime.h:78:0,
                 from <command-line>:0:
/usr/local/cuda-8.0/include/host_config.h:119:2: error: #error -- unsupported GNU version! gcc versions later than 5 are not supported!
 #error -- unsupported GNU version! gcc versions later than 5 are not supported!
  ^~~~~
CMake Error at cuda_compile_generated_gpu_mat.cu.o.cmake:206 (message):
  Error generating
  /prj/opencv/build/modules/core/CMakeFiles/cuda_compile.dir/src/cuda/./cuda_compile_generated_gpu_mat.cu.o

Если я меняю компилер на clang++ 3.8.1 (который CUDA поддерживает), то opencv говорит, что он clang++ не поддерживает для сборки модулей CUDA.

Если я меняю компилер на gcc-4.9, то он перестаёт понимать код (nullptr и прочие ништяки с++11)

Это ещё половина веселья. Хочется собрать в тот же пакет ещё opencv_contrib с поддержкой той же CUDA. Там тоже несовместимости по версии компилятора.

При этом у некоторых ребят собралось даже на g++-6.2.

Кто-нибудь в курсе, как сотворить это шаманство и собрать opencv+cuda?

P.S.: пробовал версии компиляторов специфицировать явно и глобально. Всё равно то же самое.

 , , , ,

aido
()

Django rest framework all-in-one

Форум — Web-development

Всем привет!

Не подскажете ссылки на гитхаб, где можно подсмотреть уже написанные основные связки модулей, используемых на сайтах? Меня сейчас больше всего интересует готовый пример django rest framework + jwt/oauth2 + авторизация и регистрация. Не самая ж редкая задача и не сильно различается между разработчиками? Ну полей кто-то добавит в модель, ну метод авторизации сменит. Остальное всё ж одинаково у всех. Или я не прав?

P.S.: задолбался искать ошибку в коде при респонсе IntegrityError: UNIQUE constraint failed: auth_user.username. Такое вылазит даже при новых username-ах. В сериализаторе поле nickname объявлено так nickname = serializers.CharField(max_length=12, validators=[UniqueValidator(queryset=Person.objects.all())]), проводится дополнительная проверка на него (validate_nickname).

 ,

aido
()

Django UpdateView как правильно задать форму с ImageField?

Форум — Web-development

Всем привет!

Хочется, чтобы при редактировании формы с изображением, ответ приходил на тот же URL, но не получается.

Вот код:

edit_profile.html:

<form enctype="multipart/form-data" action="" method="post" accept-charset="UTF-8">
    {% csrf_token %}
    {{ form|linebreaks }}
    <input type="submit" value="Save" />
</form>

urls.py

...
url(r'^profile/(?P<pk>[\-\w]+)/$', UpdateProfile.as_view(), name='profile'),
...

view:

class UpdateProfileForm(forms.ModelForm):
    avatar = forms.ImageField(required=False, widget=forms.FileInput)
    class Meta:
        fields = [  'firstName',
                    'lastName',
                    'avatar'] # Keep listing whatever fields 
        model =User


class UpdateProfile(UpdateView):
    # the combined UserProfile and User exposes.
    template_name = 'edit_profile.html'
    form_class = UpdateProfileForm
    model =User

models.py:

class User(AbstractBaseUser, PermissionsMixin):

    firstName = models.CharField(max_length=256)
    lastName = models.CharField(max_length=256)
    avatar = models.ImageField(upload_to=upload_location, default='inner/noimage.png')

При отправлении POST на сервер обратно, говорится, что нет урла <address>/profile/18/noimage.png. В принципе, его правда нету, но вопрос в том, как джанге правильно сказать, чтобы отправляла форму строго обратно?

 ,

aido
()

Не могу войти в систему

Форум — Admin

Всем привет!

Накатил на OrangePI PC2 дебиан. Вроде всё более менее работает, но встала одна непреодолимая (надеюсь, пока) проблема: после создания пользователя не могу под ним зайти. Говорит Permission denied на домашнюю директорию и /bin/bash. Права проверил - вроде есть. Проверил ACL. Не везде есть. не может выдать на /bin/bash (setfacl говорит, что Неподдерживаемая операция). мб в uEnv.txt надо какие-то опции еще указать при загрузке ядра (какие и чему равные)?

Вроде всё проверил. Что еще может быть? и как оно правится?

Также, туда отказываются вставать БД - mysql и mariadb (да, я извращенец - ставить на embedded БД). Не могут создаться сокеты, не может войти с паролем рута mysql-upgrade. Тоже пока с ходу не получилось поправить.

Ядро стоит из стандартной поставки (на выходных буду пробовать самосбор, ибо родной конфиг - жуть).

Вот то, что происходит:

# ls -la /home
итого 20
drwxr-xr-x 5 root root 4096 янв 14 16:14 .
drwx----— 21 orangepi orangepi 4096 янв 14 17:50 ..
drwxr-xr-x 2 aido aido 4096 янв 14 16:14 aido
drwxr-xr-x 2 michael michael 4096 янв 14 16:13 michael
drwxr-xr-x 2 orangepi orangepi 4096 янв 1 00:02 orangepi
# getfacl /home/aido
getfacl: Removing leading '/' from absolute path names
# file: home/aido
# owner: aido
# group: aido
user::rwx
group::r-x
other::r-x
# ls -la /bin/bash
-rwxr-xr-x 1 root root 909312 ноя 12 2014 /bin/bash
# date
Пт янв 15 01:42:41 UTC 2016
# getfacl /bin/bash
getfacl: Removing leading '/' from absolute path names
# file: bin/bash
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
# su aido
Cannot execute /bin/bash: Permission denied
# login aido
Пароль: 
Последний вход в систему:Чт янв 14 17:51:49 UTC 2016на pts/0
Linux Orangepi 3.10.65 #3 SMP PREEMPT Tue Nov 15 09:46:50 CST 2016 aarch64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Невозможно перейти в каталог «/home/aido»

 , ,

aido
()

Django вывод картинки в админке

Форум — Web-development

Всем привет!

Как вывести картинку в форме админки в джанге? пробовал, как по мануалам сделать - проставить readonly_fields, fieldsets/fields, но почему-то у картинки получается другой URL и в итоге 404. Как лучше в этом случае выдавать картинки?

 

aido
()

django models m2m

Форум — Web-development

Всем привет!

Как в инлайне админки джанги сделать поле, в которое загружались бы пользователи определенной группы и выбрать можно было не больше определенного количества? Пробовал так:

class Sample(models.Model):
    example=models.ManyToManyField(Group.objects.get(name='Users').user_set.all(), related_name='example')

Говорит: django.core.exceptions.AppRegistryNotReady: Models aren't loaded yet.

 ,

aido
()

CORS Django

Форум — Web-development

Всем привет! Дайте кто-нить годный пример, как в джанге подымать CORS headers. Прочитал документацию, флаги все в <project>/settings.py выставил - всё равно не робит. Использовал вот это. Даже просто CORS_ORIGIN_ALLOW_ALL выставлял в True, забив на всю безопасность. всё равно хэдеры не появляются.

Ну или в темплейт формы, для которой мне нужен CORS, что надо прописать?

 ,

aido
()

python utf8

Форум — Development

Всем привет! Как преобразовать строку «\u0439\u0446\u0443\u0433» в кириллицу? print выдает верный результат, но json.dumps({"value" : first_name}) - нет. first_name читается из БД. decode('utf8') не работает.

 , ,

aido
()

opencv+rtsp+h264=fail

Форум — Development

Всем привет!

Пытаюсь проиграть видео с IP-камеры, которая вещает по rtsp в h264-кодировке и при любом движении в кадре получается очень много артефактов, что совсем не разобрать содержимое видео. Пробовались версии:

ffmpeg 3.0 (дефолтная сборка в убунте), 3.2.3 (самосборная);

opencv 3.2.0 (самосбор с гитхаба)

QT 5.8.0/g++ 6.0 для компиляции исходников вывода видео.

Примечательно, что ffmpeg -rtsp_transport tcp и vlc адекватно отрабатывают, а VideoCapture - так, как будто бы по udp идет вещание (что и подтвердил iptraf). Проверил исходники opencv 3.2.0 - там флаг rtsp_transport выставляется, но где-то дальше по коду игнорируется.

Тащить за собой libvlc чисто из-за того, что в ней удобная обертка над libavformat для работы с rtsp уж совсем не хочется, при том, что сам ffmpeg не использует libvlc и все равно правильно работает.

К сожалению, в инете патчей к opencv не нашел и все советы сходились на использовании libvlc.

Ах да, открывается устройство вот так:

cv::VideoCapture* cap = new cv::VideoCapture( "rtsp://<IP:port>/PSIA/Streaming/channels/2?videoCodecType=H.264" )

Может, кто-то уже сталкивался с этим багом и в курсе, как его можно побороть?

 , , , ,

aido
()

Кросс-компиляция библиотеки через bazel

Форум — Development

Всем привет!

Встала задача замутить приложение под винду из под линукса. Не долго думая, я накатил mingw себе для кросс-компайла. Но чуть позже выяснилось, что надо собрать для приложения библиотеку через bazel и в качестве тестов подключить ее в питоне. Так вот, меня мучает вопрос истинного извращенца: как кросс-скомпилировать библиотеку с помощью bazel из линукса в винду, а потом подключить ее к линуксовому питону? Поймет ли bazel переменные среды ARCH и CROSS_COMPILE? Кроссами собирать еще и питон совсем не хочется (мб можно ему как-то сказать про формат библиотеки - что она виндовая?).

На оф. странице bazel было сказано следующее:

users of CVS and Subversion will be familiar with this «Swiss army knife» arrangement.
Swiss army knife

После этого стало ясно, что это очередной золотой молоток для непонятных целей, без которого я нормально жил лет 7. Ну да ладно. Хотел также узнать, если я в соответствии с этой статьей в корне проекта библиотеки пропишу тулчейн под винды, то во всех дочерних директориях проекта этот тулчейн подцепится? Вообще, кто-нибудь может рассказать, как оно внутри работает и зачем пришлось заменять make/cmake?

 , ,

aido
()

Python Mysql reconnect

Форум — Development

Всем привет! Как сделать так, чтобы при таймауте соединения с базой происходило переподключение к ней? Везде рекомендуют ping, но оно не работает. Пока использую вот такой код и он не работает:

while True:  #it works until the data was not saved                                                   
    try:                                                                                              
        self.cur.execute("SELECT property FROM objects WHERE id = %s", str(self.object_id))              
        # Delay of aggregator                                                                         
        self.agg_delay = int(self.cur.fetchall()[0][0])                                               
        break                                                                                         
    except pymysql.err.OperationalError:                                                              
        self.conn.ping(True)

Выдает вот такое:

  File "/usr/local/lib/python3.4/dist-packages/pymysql/cursors.py", line 112, in execute
    result = self._query(query)
  File "/usr/local/lib/python3.4/dist-packages/pymysql/cursors.py", line 230, in _query
    conn.query(q)
  File "/usr/local/lib/python3.4/dist-packages/pymysql/connections.py", line 607, in query
    self._affected_rows = self._read_query_result()
  File "/usr/local/lib/python3.4/dist-packages/pymysql/connections.py", line 691, in _read_query_result
    result.read()
  File "/usr/local/lib/python3.4/dist-packages/pymysql/connections.py", line 869, in read
    self.first_packet = self.connection.read_packet()
  File "/usr/local/lib/python3.4/dist-packages/pymysql/connections.py", line 685, in read_packet
    packet = packet_type(self)
  File "/usr/local/lib/python3.4/dist-packages/pymysql/connections.py", line 200, in __init__
    self.__recv_packet()
  File "/usr/local/lib/python3.4/dist-packages/pymysql/connections.py", line 206, in __recv_packet
    raise OperationalError(2013, "Lost connection to MySQL server during query")
pymysql.err.OperationalError: (2013, 'Lost connection to MySQL server during query')

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "back_server.py", line 62, in prepare
    self.cur.execute("SELECT property FROM objects WHERE id = %s", str(self.object_id))
  File "/usr/local/lib/python3.4/dist-packages/pymysql/cursors.py", line 117, in execute
    self.errorhandler(self, exc, value)
  File "/usr/local/lib/python3.4/dist-packages/pymysql/connections.py", line 189, in defaulterrorhandler
    raise errorclass(errorvalue)
pymysql.err.OperationalError: (2013, 'Lost connection to MySQL server during query')

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/lib/python3.4/dist-packages/pymysql/connections.py", line 631, in ping
    self._execute_command(COM_PING, "")
  File "/usr/local/lib/python3.4/dist-packages/pymysql/connections.py", line 716, in _execute_command
    self._send_command(command, sql)
  File "/usr/local/lib/python3.4/dist-packages/pymysql/connections.py", line 712, in _send_command
    self.wfile.flush()
  File "/usr/lib/python3.4/socket.py", line 391, in write
    return self._sock.send(b)
BrokenPipeError: [Errno 32] Broken pipe

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/lib/python3.4/dist-packages/tornado/web.py", line 1446, in _execute
    result = self.prepare()
  File "back_server.py", line 67, in prepare
    self.conn.ping(True)
  File "/usr/local/lib/python3.4/dist-packages/pymysql/connections.py", line 634, in ping
    self._connect()
  File "/usr/local/lib/python3.4/dist-packages/pymysql/connections.py", line 677, in _connect
    self._request_authentication()
  File "/usr/local/lib/python3.4/dist-packages/pymysql/connections.py", line 719, in _request_authentication
    self._send_authentication()
  File "/usr/local/lib/python3.4/dist-packages/pymysql/connections.py", line 730, in _send_authentication
    self.user = self.user.encode(self.charset)
AttributeError: 'bytes' object has no attribute 'encode' 1.50ms

 ,

aido
()

Orange Pi PC2 loading from USB/NFS

Форум — Development

Всем привет!

Кто-нибудь пытался так загружаться на этой платке по USB? Я че-то открыл исходники SPL и мрачно офигел от этого китайского зоопарка. Причем мне вообще не улыбается грузить ядро+rootfs с SD-карты, да и их сборка убута+dtb мне вообще не понравились, но это уже мелочи. Проблема в основном в том, чтобы выбросить из SPL проверку на наличие SD-карты. Чтобы сразу передавалось управление убуту в SPI NOR.

 , ,

aido
()

ffmpeg hls не удаляет строки из плейлиста

Форум — Admin

Всем привет! Запускаю команду:

ffmpeg -re -loglevel quiet -i udp://localhost:10001 \
-f hls -hls_flags delete_segments -hls_playlist_type event \
-segment_list_size 10 -segment_list_flags +live \
-use_localtime 1 -use_localtime_mkdir 1 -hls_segment_filename /home/user/%Y%m%d/%s.ts \
/home/user/4-0.m3u8

плейлист и файлы создаются, но не чистятся после истечения времени, хотя вроде должны бы (-hls_flags delete_segments, -segment_list_size 10)? Что я делаю не так?

 ,

aido
()

Python3 управление выводом

Форум — Development

Всем привет!

А как сделать в питоне так, чтобы удалялись/обновлялись строки из терминала? print по умолчанию выводит с новой строки, а хочется, чтобы текущая строка перезаписывалась, как, например, в top/htop. Просто не хочется видеть колонку одинаковых или редко меняющихся цифр.

 , ,

aido
()

Как сделать сквозное прокидывание портов

Форум — Admin

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

Вход:

Источник потока <--> Инет <--> роутер <--> сервер (192.168.1.10)

Выход:

Сервер (192.168.1.10) <--> роутер <--> Инет <--> Клиент

# iptables -L -t nat
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         
DNAT       udp  --  anywhere             anywhere             udp dpt:40001 to:192.168.1.10:40002

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         
SNAT       udp  --  anywhere             anywhere             udp spt:40002 to:0.0.0.0:40003

То есть предполагается, что по 40001 я принимаю поток, перенаправляю его локально в 40002, а потом из 40002 выкидываю напрямую в 40003.

Как сделать эту схему рабочей?

 , ,

aido
()

RSS подписка на новые темы