| 
| 
 | Вопрос # 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 (статус: Посетитель)Вопрос отправлен: 3 мая 2012, 12:09
 Состояние вопроса: открыт, ответов: 0.
 |  
 Мини-форум вопросаВсего сообщений: 16; последнее сообщение — 4 мая 2012, 20:14; участников в обсуждении: 3. 
|   | min@y™ (статус: Доктор наук), 3 мая 2012, 13:03 [#1]:Нахрена что-то переделывать на delphi, когда можно просто написать с нуля? Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | min@y™ (статус: Доктор наук), 3 мая 2012, 13:15 [#2]:Админ, чо с движком? Перестали отображаться аватары и кнопки форматирования текста. Основной браузер - FF11, проверял ещё в Опере - та же фигня.
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | casio (статус: Посетитель), 3 мая 2012, 13:27 [#3]:min@y™ : тяжеловато с нуля,был бы алгоритм ( использую для грабера компонент DSPAck |  
|   | min@y™ (статус: Доктор наук), 3 мая 2012, 13:36 [#4]: Цитата: тяжеловато с нуля,был бы алгоритм
 
 Это означает, что ты не знаешь, что делает данный код?
 Програмист для того и работает, чтобы: 1) придумать алгоритм для решения задачи; 2) написать и отладить код этого алгоритма.
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | casio (статус: Посетитель), 3 мая 2012, 13:48 [#5]:min@y™: я знаю что делает код,для этого и выложил exe, коде в с-ном описан метод поиска лица,я не пойму порядок что за чем |  
|   | min@y™ (статус: Доктор наук), 3 мая 2012, 14:02 [#6]:Ну и как переводить-то? Тут используются специфические классы и функции, которые ХЗ, есть ли в delphi. Если они доступны из каких-то DLL, то где их описание? Ну хорошо, я попробую вчерновую (в лоб) перевести щас эту писанину на паскаль, но не думаю, что это поможет.
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | casio (статус: Посетитель), 3 мая 2012, 14:12 [#8]:minay ^ спасибо что откликнулись |  
|   | 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 (статус: Посетитель), 3 мая 2012, 14:36 [#10]:minay: спасибо за помощь, но скорее всего легче не стало...( |  
|   | min@y™ (статус: Доктор наук), 3 мая 2012, 14:55 [#11]:Ну я ж предупреждал, ёмаё... Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | bugmenot (статус: 3-ий класс), 3 мая 2012, 21:10 [#12]:не проще ли взять OpenCV и..? виконання програми розпочинається з того самого мiсця, де призупинилося.
 
 |  
|   | casio (статус: Посетитель), 3 мая 2012, 21:18 [#13]:bugmenot: OpenCV работает под С и борланд, хотя я встречал под делфи только длл-ки с С, там еще сложнее чем с нуля писать |  
|   | min@y™ (статус: Доктор наук), 3 мая 2012, 21:26 [#14]:Ну вот, видишь, я ж говорил, что с нуля ПРОЩЕ! Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | bugmenot (статус: 3-ий класс), 4 мая 2012, 20:14 [#16]: Цитата (casio): там еще сложнее чем с нуля писать А никто и не говорил, что распознавание лиц - простое дело. У меня на полке стоит двухтомник, ок. 800 стр + ок. 750. Вот примерно настолько «простая» задача.
 виконання програми розпочинається з того самого мiсця, де призупинилося.
 
 |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |