Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 6 112

/ вопрос открыт /

Здравствуйте, эксперты! есть код на C# + dll,+exe, помогите переделать под делфи

вот код:

#include "windows.h"
#include "loadbmp.h" // from http://gpwiki.org/index.php/LoadBMPCpp
#include "fdlib.h"
 
void main(int argc, char *argv[]) 
{
  int i, n, x[256], y[256], size[256], w, h, threshold;  
  BMPImg *bi;
  unsigned char *bgrdata, *graydata;
 
  if (argc==1)
  {
      printf("usage: fdtest bmpfilename [threshold]\n");
      exit(0);
  }
 
  bi = new BMPImg();
  printf("\nloading %s\n", argv[1]);
  bi->Load(argv[1]);
  w = bi->GetWidth();
  h = bi->GetHeight();
  printf("image is %dx%d pixels\n", w, h);
  bgrdata = bi->GetImg();
  graydata = new unsigned char[w*h];
 
  for (i=0; i<w*h; i++)
  {
      graydata[i] = (unsigned char) ((.11*bgrdata[3*i] + .59*bgrdata[3*i+1] + .3*bgrdata[3*i+2]));
      //if (i<10) printf("%d ", graydata[i]);      
  }  
 
  threshold = argc>2 ? atoi(argv[2]) : 0;
  printf("detecting with threshold = %d\n", threshold);
  fdlib_detectfaces(graydata, w, h, threshold);  
 
  n = fdlib_getndetections();
  if (n==1)
      printf("%d face found\n", n);
  else
       printf("%d faces found\n", n);    
 
  for (i=0; i<n; i++)
  {
      fdlib_getdetection(i, x+i, y+i, size+i);
      printf("x:%d y:%d size:%d\n", x[i], y[i], size[i]);
  }
 
  delete[] graydata;
  delete bi;
}

К вопросу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки вопроса)

casio Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: casio (статус: Посетитель)
Вопрос отправлен: 3 мая 2012, 12:09
Состояние вопроса: открыт, ответов: 0.


Мини-форум вопроса

Всего сообщений: 16; последнее сообщение — 4 мая 2012, 20:14; участников в обсуждении: 3.
min@y™

min@y™ (статус: Доктор наук), 3 мая 2012, 13:03 [#1]:

Нахрена что-то переделывать на delphi, когда можно просто написать с нуля?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
min@y™

min@y™ (статус: Доктор наук), 3 мая 2012, 13:15 [#2]:

Админ, чо с движком? Перестали отображаться аватары и кнопки форматирования текста.
Основной браузер - FF11, проверял ещё в Опере - та же фигня.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
casio

casio (статус: Посетитель), 3 мая 2012, 13:27 [#3]:

min@y™ : тяжеловато с нуля,был бы алгоритм ( использую для грабера компонент DSPAck
min@y™

min@y™ (статус: Доктор наук), 3 мая 2012, 13:36 [#4]:

Цитата:


тяжеловато с нуля,был бы алгоритм

Это означает, что ты не знаешь, что делает данный код?
Програмист для того и работает, чтобы: 1) придумать алгоритм для решения задачи; 2) написать и отладить код этого алгоритма.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
casio

casio (статус: Посетитель), 3 мая 2012, 13:48 [#5]:

min@y™: я знаю что делает код,для этого и выложил exe, коде в с-ном описан метод поиска лица,я не пойму порядок что за чем
min@y™

min@y™ (статус: Доктор наук), 3 мая 2012, 14:02 [#6]:

Ну и как переводить-то? Тут используются специфические классы и функции, которые ХЗ, есть ли в delphi. Если они доступны из каких-то DLL, то где их описание?
Ну хорошо, я попробую вчерновую (в лоб) перевести щас эту писанину на паскаль, но не думаю, что это поможет.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
casio

casio (статус: Посетитель), 3 мая 2012, 14:11 [#7]:

minay: наверное это Интегральное представление изображений, нашел статью http://habrahabr.ru/post/102919/, там ниже тоже приведен код, но все равно не пойму где реализован поиск?(алгоритм) скорее всего алгоритм заложен в длл-ку!? и подозреваю что это алгоритм Виолы-Джонса http://habrahabr.ru/post/133826/
casio

casio (статус: Посетитель), 3 мая 2012, 14:12 [#8]:

minay ^ спасибо что откликнулись
min@y™

min@y™ (статус: Доктор наук), 3 мая 2012, 14:30 [#9]:

program p6112;
 
{$APPTYPE CONSOLE}
 
uses
  SysUtils;
 
var
  {int i, n, x[256], y[256], size[256], w, h, threshold;
  BMPImg *bi;
  unsigned char *bgrdata, *graydata;}
  i, n, w, h, threshold: Integer;
  x, y, size: array[0..255] of Integer;
  bgrdata, graydata: array of Byte;
 
begin
  (*
  if (argc==1)
  {
      printf("usage: fdtest bmpfilename [threshold]\n");
      exit(0);
  }
  *)
  if ParamCount = 1
    then begin
           WriteLn('usage: fdtest bmpfilename [threshold]\n');
           Halt(0);
         end;
 
  (*
  bi = new BMPImg();
  printf("\nloading %s\n", argv[1]);
  bi->Load(argv[1]);
  w = bi->GetWidth();
  h = bi->GetHeight();
  printf("image is %dx%d pixels\n", w, h);
  bgrdata = bi->GetImg();
  graydata = new unsigned char[w*h];
  *)
 
  bi:= BMPImg.Create();
  WriteLn(#13#10'loading ', ParamStr(1));
  bi.Load(ParamStr(1));
  w:= bi.GetWidth();
  h:= bi.GetHeight();
  WriteLn('image is ', w, 'x', h, ' pixels');
  bgrdata:= bi.GetImg(); // <-- Внутри метода должно быть выделение памяти
  SetLength(graydata, w * h);
 
  (*
  for (i=0; i<w*h; i++)
  {
      graydata[i] = (unsigned char) ((.11*bgrdata[3*i] + .59*bgrdata[3*i+1] + .3*bgrdata[3*i+2]));
      //if (i<10) printf("%d ", graydata[i]);
  }
  *)
  for i:= 0 to w * h - 1 do
    graydata[i]:= Byte(0.11 * graydata[i] + 0.59 * bgrdata[3 * i + 1] + 0.3 * bgrdata[3 * i + 2]);
 
  (*
  threshold = argc>2 ? atoi(argv[2]) : 0;
  printf("detecting with threshold = %d\n", threshold);
  fdlib_detectfaces(graydata, w, h, threshold);
  *)
  if ParamCount > 2
    then threshold:= StrToInt(ParamStr(2))
    else threshold:= 0;
 
  WriteLn('detecting with threshold = ', threshold);
  fdlib_detectfaces(graydata, w, h, threshold);
 
  (*
  n = fdlib_getndetections();
  if (n==1)
      printf("%d face found\n", n);
  else
       printf("%d faces found\n", n);
  *)
  n = fdlib_getndetections();
  if n = 1
    then WriteLn(n, ' face found')
    else WriteLn(n, ' faces found');
 
  (*
  for (i=0; i<n; i++)
  {
      fdlib_getdetection(i, x+i, y+i, size+i);
      printf("x:%d y:%d size:%d\n", x[i], y[i], size[i]);
  }
  *)
  for i:= 0 to n - 1 do
    begin
      fdlib_getdetection(i, x + i, y + i, size + i);
      WriteLn('x:', x[i], ' y:', y[i], ' size:', size[i]);
    end;
 
  (*
  delete[] graydata; // при использовании динмассивов delphi - не нужно
  delete bi;         // при использовании динмассивов delphi - не нужно
  *)
end.

Ну и чего? Легче стало?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
casio

casio (статус: Посетитель), 3 мая 2012, 14:36 [#10]:

minay: спасибо за помощь, но скорее всего легче не стало...(
min@y™

min@y™ (статус: Доктор наук), 3 мая 2012, 14:55 [#11]:

Ну я ж предупреждал, ёмаё...
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
bugmenot

bugmenot (статус: 3-ий класс), 3 мая 2012, 21:10 [#12]:

не проще ли взять OpenCV и..?
виконання програми розпочинається з того самого мiсця, де призупинилося.

casio

casio (статус: Посетитель), 3 мая 2012, 21:18 [#13]:

bugmenot: OpenCV работает под С и борланд, хотя я встречал под делфи только длл-ки с С, там еще сложнее чем с нуля писать
min@y™

min@y™ (статус: Доктор наук), 3 мая 2012, 21:26 [#14]:

Ну вот, видишь, я ж говорил, что с нуля ПРОЩЕ!
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
casio

casio (статус: Посетитель), 3 мая 2012, 22:16 [#15]:

min@y™ : хотя я почитал вот здесь http://people.kyb.tuebingen.mpg.de/kienzle/fdlib/fdlib.htm#download ,что все намного проще чем кажется, но все равно не догоню (
bugmenot

bugmenot (статус: 3-ий класс), 4 мая 2012, 20:14 [#16]:

Цитата (casio):

там еще сложнее чем с нуля писать

А никто и не говорил, что распознавание лиц - простое дело. У меня на полке стоит двухтомник, ок. 800 стр + ок. 750. Вот примерно настолько «простая» задача.
виконання програми розпочинається з того самого мiсця, де призупинилося.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 16:43
Выполнено за 0.03 сек.