Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3 4   вперед  Ctrl      все
 Re: Нейронные сети  [new]
defecator
Member

Откуда:
Сообщений: 35368
Няшик
defecator,

Нажми на картинку левой кнопкой, и тяни в нижнюю правую сторону. Он выделяет часть картинки

И что должно быть ?

К сообщению приложен файл. Размер - 136Kb
2 окт 17, 11:11    [20835715]     Ответить | Цитировать Сообщить модератору
 Re: Нейронные сети  [new]
Няшик
Member

Откуда: Екатеринбург
Сообщений: 728
defecator,

Так ты возьми и сделай что я сказал. Появится красное выделение области картинки.
2 окт 17, 11:19    [20835739]     Ответить | Цитировать Сообщить модератору
 Re: Нейронные сети  [new]
defecator
Member

Откуда:
Сообщений: 35368
Няшик
defecator,

Так ты возьми и сделай что я сказал. Появится красное выделение области картинки.


я в своей тестовой программе скрины показываю,
мне начхать на демки с сайта.
Там программеры могли накрутить чего угодно, тем более, что сама распознавалка - отдельно в DLL,
а всё остальное в интерфейсе - это накручено программерами на дельфях.

Распознавалка работает корректно, быстро и качественно, и этого достаточно.
2 окт 17, 11:22    [20835747]     Ответить | Цитировать Сообщить модератору
 Re: Нейронные сети  [new]
Няшик
Member

Откуда: Екатеринбург
Сообщений: 728
defecator,

Скачал исходники и глянул. Он делает снимок по шайпу, и когда нажимаешь мышкой. То он перемещает этот шайп в область нужную

+
unit Main;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls, ExtCtrls, Ocr, ExtDlgs, XPMan;

type
  TFormMain = class(TForm)
    Ocr: TOcr;
    OpenPictureDialog: TOpenPictureDialog;
    XPManifest: TXPManifest;
    PanelLeft: TPanel;
    Panel: TPanel;
    Image: TImage;
    ButtonSelectPicture: TButton;
    PanelRight: TPanel;
    Splitter: TSplitter;
    ButtonCancel: TButton;
    ProgressBar: TProgressBar;
    PageControl: TPageControl;
    TabSheetText: TTabSheet;
    MemoText: TMemo;
    TabSheetHtml: TTabSheet;
    MemoHtml: TMemo;
    TabSheetUnlv: TTabSheet;
    MemoUnlv: TMemo;
    TabSheetWords: TTabSheet;
    ScrollBoxWords: TScrollBox;
    ImageWords: TImage;
    TabSheetRegions: TTabSheet;
    ScrollBoxRegions: TScrollBox;
    ImageRegions: TImage;
    TabSheetTextLines: TTabSheet;
    ScrollBoxTextLines: TScrollBox;
    ImageTextLines: TImage;
    TabSheetConnectedComponents: TTabSheet;
    ScrollBoxComponents: TScrollBox;
    ImageComponents: TImage;
    ButtonRecognize: TButton;
    TabSheetParagraphs: TTabSheet;
    ScrollBoxParagraphs: TScrollBox;
    ImageParagraphs: TImage;
    Shape: TShape;
    procedure ButtonSelectPictureClick(Sender: TObject);
    procedure ButtonRecognizeClick(Sender: TObject);
    procedure ButtonCancelClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure OcrProgress(Sender: TObject; var Cancel: Boolean; Progress,
      WordCount: Integer);
    procedure ImageMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure ImageMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure ImageMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure PanelResize(Sender: TObject);
  private
    { Private declarations }
    CancelRequest: Boolean;
    Selecting: Boolean;
  public
    { Public declarations }
  end;

var
  FormMain: TFormMain;

implementation

{$R *.dfm}

uses Jpeg
{$ifdef CONDITIONALEXPRESSIONS}
  {$if CompilerVersion >= 30} // Delphi 10
    , GIFImg, PngImage
  {$ifend}
{$endif}
;

procedure TFormMain.ButtonSelectPictureClick(Sender: TObject);
begin
  with OpenPictureDialog do
    if Execute then
    begin
      Shape.Width := 0;
      Shape.Height := 0;
      ProgressBar.Position := 0;
      MemoText.Clear;
      MemoHtml.Clear;
      MemoUnlv.Clear;
      ImageWords.Picture := nil;
      ImageRegions.Picture := nil;
      ImageTextLines.Picture := nil;
      ImageComponents.Picture := nil;
      ImageParagraphs.Picture := nil;
      
      try
        Image.Picture.LoadFromFile(FileName);
        Ocr.Picture.Assign(Image.Picture);
      except
        Image.Picture := nil;
        ShowMessage('Preview of this image cannot be displayed. Click Recognize button to start OCR.');
        Ocr.PictureFileName := FileName;
      end;

      if not Ocr.Active then
      begin
        Ocr.DataPath := ExtractFilePath(Application.ExeName);
        Ocr.Active := True;
      end;
      ButtonRecognize.Enabled := True;
      Image.Cursor := crCross;
    end
end;

function RectToImageRect(Image: TImage; Rect: TRect): TRect;
var
  w, h, cw, ch: Integer;
  xyaspect: Double;
  DrawRect: TRect;
  Temp: Integer;
begin
  w := Image.Picture.Width;
  h := Image.Picture.Height;
  cw := Image.ClientWidth;
  ch := Image.ClientHeight;
  if Image.Stretch or (Image.Proportional and ((w > cw) or (h > ch))) then
  begin
    if Image.Proportional and (w > 0) and (h > 0) then
    begin
      xyaspect := w / h;
      if w > h then
      begin
        w := cw;
        h := Trunc(cw / xyaspect);
        if h > ch then
        begin
          h := ch;
          w := Trunc(ch * xyaspect);
        end;
      end
      else
      begin
        h := ch;
        w := Trunc(ch * xyaspect);
        if w > cw then
        begin
          w := cw;
          h := Trunc(cw / xyaspect);
        end;
      end;
    end
    else
    begin
      w := cw;
      h := ch;
    end;
  end;

  with DrawRect do
  begin
    Left := 0;
    Top := 0;
    Right := w;
    Bottom := h;
  end;

  if Image.Center then
    OffsetRect(DrawRect, (cw - w) div 2, (ch - h) div 2);

  if Rect.Left > Rect.Right then
  begin
    // swap
    Temp := Rect.Left;
    Rect.Left := Rect.Right;
    Rect.Right := Temp;
  end;

  if Rect.Top > Rect.Bottom then
  begin
    // swap
    Temp := Rect.Top;
    Rect.Top := Rect.Bottom;
    Rect.Bottom := Temp;
  end;

  Result.Left := Trunc((Rect.Left - DrawRect.Left) * (Image.Picture.Width / w));
  Result.Top := Trunc((Rect.Top - DrawRect.Top) * (Image.Picture.Height / h));
  Result.Right := Trunc(Result.Left + (Rect.Right - Rect.Left) * (Image.Picture.Width / w));
  Result.Bottom := Trunc(Result.Top + (Rect.Bottom - Rect.Top) * (Image.Picture.Height / h));

  if Result.Left < 0 then
    Result.Left := 0
  else if Result.Left >= Image.Picture.Width then
    Result.Left := Image.Picture.Width - 1;

  if Result.Top < 0 then
    Result.Top := 0
  else if Result.Top >= Image.Picture.Height then
    Result.Top := Image.Picture.Height - 1;

  if Result.Right < 0 then
    Result.Right := 0
  else if Result.Right >= Image.Picture.Width then
    Result.Left := Image.Picture.Width - 1;

  if Result.Bottom < 0 then
    Result.Bottom := 0
  else if Result.Bottom >= Image.Picture.Height then
    Result.Bottom := Image.Picture.Height - 1;
end;

function RectToShapeRect(UseShape: Boolean; Rect, ShapeRect: TRect): TRect;
begin
  Result := Rect;
  if UseShape then
  begin
    Inc(Result.Left, ShapeRect.Left);
    Inc(Result.Top, ShapeRect.Top);
    Inc(Result.Right, ShapeRect.Left);
    Inc(Result.Bottom, ShapeRect.Top);
  end;
end;

procedure TFormMain.ButtonRecognizeClick(Sender: TObject);
var
  i: Integer;
  UseShape: Boolean;
  ShapeRect: TRect;
begin
  try
    ProgressBar.Position := 0;
    CancelRequest := False;
    ButtonSelectPicture.Enabled := False;
    ButtonCancel.Visible := True;
    MemoText.Clear;
    MemoHtml.Clear;
    MemoUnlv.Clear;
    ImageWords.Picture := nil;
    ImageRegions.Picture := nil;
    ImageTextLines.Picture := nil;
    ImageComponents.Picture := nil;
    ImageParagraphs.Picture := nil;

    UseShape := (Shape.Width <> 0) and (Shape.Height <> 0);
    if UseShape then
    begin
      ShapeRect := RectToImageRect(Image, Shape.BoundsRect);
      Ocr.PictureLeft := ShapeRect.Left;
      Ocr.PictureTop := ShapeRect.Top;
      Ocr.PictureWidth := ShapeRect.Right - ShapeRect.Left;
      Ocr.PictureHeight := ShapeRect.Bottom - ShapeRect.Top;
    end
    else
    begin
      Ocr.PictureLeft := 0;
      Ocr.PictureTop := 0;
      Ocr.PictureWidth := 0;
      Ocr.PictureHeight := 0;
    end;

    Repaint;
    if not CancelRequest then
      MemoText.Text := StringReplace(Ocr.Text, #$a, #$d#$a, [rfReplaceAll]);
    if not CancelRequest then
      MemoHtml.Text := StringReplace(Ocr.GetHtmlText, #$a, #$d#$a, [rfReplaceAll]);
    if not CancelRequest then
      MemoUnlv.Text := StringReplace(Ocr.Unlv, #$a, #$d#$a, [rfReplaceAll]);

    if not CancelRequest then
      ProgressBar.Position := 100
    else
      ProgressBar.Position := 0;

    if not CancelRequest then
      if Image.Picture <> nil then
      begin
        ImageWords.Picture.Bitmap.Assign(Image.Picture.Graphic);
        ImageWords.Picture.Bitmap.PixelFormat := pf32bit;
        ImageWords.Canvas.Brush.Color := TColor($007FFF);
        for i := 0 to Ocr.WordCount - 1 do
          ImageWords.Canvas.FrameRect(RectToShapeRect(UseShape, Ocr.Words[i], ShapeRect));

        ImageRegions.Picture.Bitmap.Assign(Image.Picture.Graphic);
        ImageRegions.Picture.Bitmap.PixelFormat := pf32bit;
        ImageRegions.Canvas.Brush.Color := TColor($7F00FF);
        for i := 0 to Ocr.RegionCount - 1 do
          ImageRegions.Canvas.FrameRect(RectToShapeRect(UseShape, Ocr.Regions[i], ShapeRect));

        ImageTextLines.Picture.Bitmap.Assign(Image.Picture.Graphic);
        ImageTextLines.Picture.Bitmap.PixelFormat := pf32bit;
        ImageTextLines.Canvas.Brush.Color := TColor($00FF7F);
        for i := 0 to Ocr.TextLineCount - 1 do
          ImageTextLines.Canvas.FrameRect(RectToShapeRect(UseShape, Ocr.TextLines[i], ShapeRect));

        ImageComponents.Picture.Bitmap.Assign(Image.Picture.Graphic);
        ImageComponents.Picture.Bitmap.PixelFormat := pf32bit;
        ImageComponents.Canvas.Brush.Color := TColor($FF7F00);
        for i := 0 to Ocr.ConnectedComponentCount - 1 do
          ImageComponents.Canvas.FrameRect(RectToShapeRect(UseShape, Ocr.ConnectedComponents[i], ShapeRect));

        ImageParagraphs.Picture.Bitmap.Assign(Image.Picture.Graphic);
        ImageParagraphs.Picture.Bitmap.PixelFormat := pf32bit;
        ImageParagraphs.Canvas.Brush.Color := TColor($7FFF00);
        for i := 0 to Ocr.ParagraphCount - 1 do
          ImageParagraphs.Canvas.FrameRect(Ocr.Paragraphs[i].Location);
      end;
  finally
    ButtonCancel.Visible := False;
    ButtonSelectPicture.Enabled := True;
  end;
end;

procedure TFormMain.ButtonCancelClick(Sender: TObject);
begin
  CancelRequest := True;
end;

procedure TFormMain.FormCreate(Sender: TObject);
begin
  ShowMessage('OCR recognition can be slow when application is started from Delphi IDE.');
end;

procedure TFormMain.OcrProgress(Sender: TObject; var Cancel: Boolean;
  Progress, WordCount: Integer);
begin
  ProgressBar.Position := Progress;
  Application.ProcessMessages; // so we are able to click Cancel button
  Cancel := CancelRequest;
end;

procedure TFormMain.ImageMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  if Ocr.Active then
    if Button = mbLeft then
    begin
      Selecting := True;
      Shape.Left := X;
      Shape.Top := Y;
      Shape.Width := 0;
      Shape.Height := 0;
    end;
end;

procedure TFormMain.ImageMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
  if Selecting then
  begin
    Shape.Width := X - Shape.Left;
    Shape.Height := Y - Shape.Top;
  end;
end;

procedure TFormMain.ImageMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  if Selecting then
  begin
    Selecting := False;
    Shape.Width := X - Shape.Left;
    Shape.Height := Y - Shape.Top;
    Repaint;
  end;
end;

procedure TFormMain.PanelResize(Sender: TObject);
begin
  Shape.Width := 0;
  Shape.Height := 0;
end;

end.


А когда надо, режим изображения в этой области
  ShapeRect := RectToImageRect(Image, Shape.BoundsRect);


По умолчанию, это вся область картинки
2 окт 17, 11:27    [20835764]     Ответить | Цитировать Сообщить модератору
 Re: Нейронные сети  [new]
defecator
Member

Откуда:
Сообщений: 35368
ну и что ?
2 окт 17, 11:29    [20835777]     Ответить | Цитировать Сообщить модератору
 Re: Нейронные сети  [new]
Partisan M
Member

Откуда:
Сообщений: 1183
Заглянул сюда случайно, увидев вопрос в общем списке тем. Delphi давно не существует, если кто не заметил.

Damir_85
Я хочу начать изучать нейронные сети, и поэтому хотел спросить вас о литературе по этой теме.


Значит, заодно придётся изучить Python. Большая часть литературы по нейронным сетям (теперь методика называется deep learning) и вообще по машинному обучению - с примерами на Python (в том числе новые книги на русском языке), и большая часть готовых библиотек предназначены для Python-а или имеют интерфейсы для обращения из Python-а. На втором месте - R, тоже неплохо обеспечен литературой и библиотеками. Но это, в отличие от Python и Delphi, специализированный язык для задач математической статистики.
Для темы машинного обучения глубокое знание Python-а не требуется, но заодно поизучаете то, чем сейчас можно заменить Delphi.

Ответы про распознавание текста вызваны тем, что их автор не понял вопроса.
2 окт 17, 11:42    [20835829]     Ответить | Цитировать Сообщить модератору
 Re: Нейронные сети  [new]
ziv-2014
Member

Откуда:
Сообщений: 63
Вот вариант на delphi https://github.com/Steema/BI
2 окт 17, 12:01    [20835914]     Ответить | Цитировать Сообщить модератору
 Re: Нейронные сети  [new]
defecator
Member

Откуда:
Сообщений: 35368
ziv-2014
Вот вариант на delphi https://github.com/Steema/BI


Хоть и лежит на гитхабе, однако исходники там все испорченные.
Только интерфейсные части.

Хотя ещё весной там лежало всё целиком.
2 окт 17, 12:14    [20835962]     Ответить | Цитировать Сообщить модератору
 Re: Нейронные сети  [new]
defecator
Member

Откуда:
Сообщений: 35368
правильная ссылка на SteeBI со всеми исходниками:
http://www.steebi.com/files/code/beta/vcl_fmx/TeeBI_SourceCode.zip
2 окт 17, 12:15    [20835967]     Ответить | Цитировать Сообщить модератору
 Re: Нейронные сети  [new]
Dimonka
Member

Откуда:
Сообщений: 952
Partisan M
Заглянул сюда случайно, увидев вопрос в общем списке тем. Delphi давно не существует, если кто не заметил.
Вообще ничего не существует. "R", "Python" тоже зачастую не существуют для коммерческого использования из-за особенности лицензионных соглашений многих из их "бесплатных" библиотек.
2 окт 17, 17:40    [20837054]     Ответить | Цитировать Сообщить модератору
 Re: Нейронные сети  [new]
makhaon
Member

Откуда: A galaxy far far away
Сообщений: 2084
автор
Про мертвость - это увы не смех, а факт. Меня тоже это не очень радует.


Идере расскажи, вместе посмеётесь :)

автор
Delphi давно не существует, если кто не заметил.


Весь мир - тлен. Ничего вокруг нет :)
2 окт 17, 23:08    [20837639]     Ответить | Цитировать Сообщить модератору
 Re: Нейронные сети  [new]
schi
Member

Откуда: Москва
Сообщений: 2344
makhaon
автор
Про мертвость - это увы не смех, а факт. Меня тоже это не очень радует.


Идере расскажи, вместе посмеётесь :)

автор
Delphi давно не существует, если кто не заметил.


Весь мир - тлен. Ничего вокруг нет :)


Мы вместе смеемся с 2007 года, если что.

Компиляторы Фортрана и PL/1, представь, до сих пор разрабатывают.
Я понимаю, что тебе грустно, да и мне тоже, но факт есть факт - скоро за упоминание Delphi в приличном обществе будут бить канделябром.
3 окт 17, 10:37    [20838197]     Ответить | Цитировать Сообщить модератору
 Re: Нейронные сети  [new]
Cobalt747
Member

Откуда:
Сообщений: 1972
schi,

Это кто же, мне интересно, составляет это приличное общество?
3 окт 17, 12:26    [20838588]     Ответить | Цитировать Сообщить модератору
 Re: Нейронные сети  [new]
makhaon
Member

Откуда: A galaxy far far away
Сообщений: 2084
schi,

Идера то Сенчу прикупит, то еще что. Наверно, что бы поржать вместе и Игорем :)
3 окт 17, 14:39    [20839116]     Ответить | Цитировать Сообщить модератору
 Re: Нейронные сети  [new]
Damir_85
Member

Откуда:
Сообщений: 163
Спасибо за ссылки.
Читая форум, натолкнулся на высказывание что Дельфи - это мертвый язык. Согласен лишь наполовину, потому, что да, действительно сейчас он не очень популярен, даже в объявлениях на работу его практически не встретишь. Но с другой стороны, какая разница на чем написана программа, ведь главное чтобы она работала!
Кстати насчет Python : в последнее время много о нем слышу, скорее всего начну его изучать, т.к. прочитал здесь что под него много библиотек, ну и сравню с Дельфи
3 окт 17, 18:05    [20839932]     Ответить | Цитировать Сообщить модератору
 Re: Нейронные сети  [new]
чччД
Guest
Damir_85
...какая разница на чем написана программа, ведь главное чтобы она работала...

Разница в том, что языков много, а годные библиотеки есть только для некоторых. Иногда можно использовать чужие библиотеки, но далеко не всегда.
3 окт 17, 18:27    [20839996]     Ответить | Цитировать Сообщить модератору
 Re: Нейронные сети  [new]
makhaon
Member

Откуда: A galaxy far far away
Сообщений: 2084
чччД,

Годные библиотеки можно написать, использовать самим и продавать. Мало кто думает терминами бизнеса. Ну тут мало что поделаешь.
3 окт 17, 18:38    [20840020]     Ответить | Цитировать Сообщить модератору
 Re: Нейронные сети  [new]
чччД
Guest
makhaon
чччД,

Годные библиотеки можно написать в гараже, использовать самим и продавать. Мало кто думает терминами бизнеса. Ну тут мало что поделаешь.

Поправил. :)
3 окт 17, 18:54    [20840056]     Ответить | Цитировать Сообщить модератору
 Re: Нейронные сети  [new]
makhaon
Member

Откуда: A galaxy far far away
Сообщений: 2084
чччД,

Бывает, что уж :)

http://hitech.vesti.ru/article/625961/
3 окт 17, 19:59    [20840117]     Ответить | Цитировать Сообщить модератору
 Re: Нейронные сети  [new]
Jude
Member

Откуда: Mars
Сообщений: 2471
schi
makhaon
пропущено...


Идере расскажи, вместе посмеётесь :)

пропущено...


Весь мир - тлен. Ничего вокруг нет :)


Мы вместе смеемся с 2007 года, если что.

Компиляторы Фортрана и PL/1, представь, до сих пор разрабатывают.
Я понимаю, что тебе грустно, да и мне тоже, но факт есть факт - скоро за упоминание Delphi в приличном обществе будут бить канделябром.

мне тоже регулярно говорят, что делфи мертв. гдето с 2002го.
при этом ничего не мешало на нем работать .
поменял лыжи где-то в 2014 (12 лет!) = щас опять слышу от "горячих парней" 23х лет отроду , что "делфи мертв!"(с) - недавно вакансию получил на удаленку.
однако да. кто-то на мертвом языке стартанул игрушки под андроид на фаермонкей :)

Зомби, блин, апокалипсис!
11 окт 17, 12:43    [20860457]     Ответить | Цитировать Сообщить модератору
 Re: Нейронные сети  [new]
kaimi
Member

Откуда:
Сообщений: 11
Jude,

Язык мертв когда его перестают использовать для новых проектов. А Firemonkey был изначально мертворожденным. А та поддержка которая сейчас существует - исключительно связанна с legacy продуктами которым embarcadero оказывает консалтинг.
Очень трудно отрицать смерть Языка, если его комьюнити с каждым годом только уменьшается.

А вакансии... Вакансии всегда будут.
30 окт 17, 19:00    [20913269]     Ответить | Цитировать Сообщить модератору
 Re: Нейронные сети  [new]
rgreat
Member

Откуда:
Сообщений: 3739
Откуда вы беретесь то?
30 окт 17, 19:05    [20913294]     Ответить | Цитировать Сообщить модератору
 Re: Нейронные сети  [new]
kealon(Ruslan)
Member

Откуда: Нижневартовск
Сообщений: 2397
rgreat,

дельфи тяжёл в использовании, современное поколение не может освоить такой объём информации, а зачёты получать надо
отсюда и срывы.

По комьюнити вообще удивительно, дельфи-форум вроде один из самых живых
30 окт 17, 19:20    [20913330]     Ответить | Цитировать Сообщить модератору
 Re: Нейронные сети  [new]
kaimi
Member

Откуда:
Сообщений: 11
kealon(Ruslan),

Я не думаю что делфи сложнее любого современного веб-стека(где помимо языка нужно знать и понимать еще кучу технологий) или языков типа Scala, Haskel, Kotlin, Python, etc...
Часто встречаете вакансии типа Junior Delphi Devekoper? А Junior Python Developer? Сомневаюсь что это связанно со "сложностью" Delphi.

Просто отсутствует класс задач, с которыми он(Delphi) бы справлялся лучше конкурентных технологий.

По поводу комьюнити:
Стоит обратиться к открытым источникам: https://insights.stackoverflow.com/survey/2017#technology-programming-languages или http://githut.info/ чтобы понять что его почти нет. А локальный форум - не показатель.
30 окт 17, 19:39    [20913372]     Ответить | Цитировать Сообщить модератору
 Re: Нейронные сети  [new]
чччД
Guest
kealon(Ruslan),

дельфи - это ж интербейз. А он никому не нужен.
30 окт 17, 19:44    [20913384]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3 4   вперед  Ctrl      все
Все форумы / Delphi Ответить