Vmalin
@Vmalin
Системный инженер

MatLab. Импорт данных из СУБД полей blob. В частности из MS SQL?

Работаю с МАТЛАБ недавно. Установлена версия R2017a. Общая задача - анализ изображений. При работе с файлами - никаких вопросов не возникает все работает отлично. Но обработать придется миллионы изображений. Они содержатся в MS SQL, в поле blob, в виде JPG - файлов. Для теста попробовал произвести импорт 300 записей с помощью мастера Database Explorer. Используемый ODBC driver - SQL Server Native client 11.0. Все просто и замечательно. Получаю Cell Array 300x2 cell. Номер записи и непосредственно сам рисунок. При просмотре, видно что размерность изображений разная:
20243x1 uint8
19020x1 uint8 и т.д.
Поработал - убедился - все прекрасно: фотографии отличные.
С помощью того же DataBase Explorer сгенерил скрипт импорта данных:
%Set preferences with setdbprefs.
setdbprefs('DataReturnFormat', 'cellarray');
setdbprefs('NullNumberRead', 'NaN');
setdbprefs('NullStringRead', 'null');
%Make connection to database. Note that the password has been omitted.
%Using ODBC driver.
conn = database('Test10', 'user', 'pass');
%Read data from database.
curs = exec(conn, ['SELECT RecID, Image FROM Images'];
curs = fetch(curs);
close(curs);
%Assign data to output variable
ImpData = curs.Data;
%Close database connection.
close(conn);
%Clear variables
clear curs conn

Данные импортятся, НО! размерность изображений стала постоянная и урезанная :
8000x1 int8
8000x1 int8
Попытался поэксперементировать с параметрами setdbprefs, conn и exec - ничего путного не получилось (Возможно мало старался - но недельку угробил).
Вопросу поставил тип "Сложный", потому-что ни поисковые системы, ни обращение на официальные ресурсы (как на русском, так и на английском языке) ответа не дали.
Может кто - нибудь подсказать, хоть в каком направлении копать? Встроенный мастер же нормально импортирует.
  • Вопрос задан
  • 165 просмотров
Пригласить эксперта
Ответы на вопрос 1
Vmalin
@Vmalin Автор вопроса
Системный инженер
Сегодня мне удалось найти решение, которое заработало, но вопросы все-равно остались.
С того времени, как задавался вопрос, я поменял компьютер, ОС систему и версию MATLAB.
ОС - Windows 10
MATLAB - 9.5.0.944444 (R2018b)
Решение нашлось в использованном типе ODBC драйвера.
У меня в данный момент установлены следующие:

5c24b2b7cbcac690590272.png

По идее, каждый из этих драйверов должен давать нормальный результат, но так у меня сработал только
драйвер MS SQL, отмеченный на скриншоте. Все остальные выдают урезанный результат данных до 8000, указанный же дал вот эти данные:
6143047		5999x1 	uint8
224233		24889x1 uint8
4200382		6130x1 	uint8
13687913	28456x1 uint8
2212046		8511x1 	uint8
8346866		6400x1 	uint8
1305479		6760x1 	uint8
7806085		6641x1 	uint8
6851834		7164x1 	uint8
7084710		6550x1 	uint8
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы