Вівторок, 19.03.2024, 05:02
Гость

Мішатронік

Мобільна версія | Додати у вибране  | Мій профіль | Вихід | RSS |
Меню сайту
Категории раздела
Наше опитування
Вам легко дається програмування
Всього відповідей: 2
Статистика

Онлайн всього: 1
Гостей: 1
Користувачів: 0


Главная » FAQ


// для получения текущей даты и  времени воспользуйтесь функцией

// Now() из модуля Sysutils.hpp . Отобразить  полученные дату и

// время можно следующим образом (Button1 - кнопка на  форме):

void __fastcall TForm1::Button1Click(TObject  *Sender)

{

Form1->Caption =  DateTimeToStr(Now());

}


// для получения текущего времени воспользуйтесь функцией  Time()

// из модуля Sysutils.hpp . Отобразить полученную дату можно

//  следующим образом (Button1 - кнопка на форме):

void __fastcall  TForm1::Button1Click(TObject *Sender)

{

Form1->Caption =  DateTimeToStr(Time());

}


// для получения дня недели воспользуйтесь функцией  DayOfWeek()

// из модуля Sysutils.hpp, передав ей текущую дату.  DayOfWeek

// возвращает значение от 1 до 7, где 1 - воскресенье,

// 2 -  понедельник, и т. д.

int Day =  DayOfWeek(Date());


Напишите следующий код:

void __fastcall  TForm1::Timer1Timer(TObject *Sender)

{

Label1->Caption =  FormatDateTime("hh:nn",Time());

Timer1->Interval=10000;// меньше число, больше точность

}


// Напишите следующий код:

DWORD start=GetTickCount();
// тут ваша функция или как-либо действия

Edit1->Text=FloatToStr((GetTickCount()-start)/1000.);


// Преобразование осуществляется следующей функцией:

void SetBitmapPaletteToGreyScale(Graphics::TBitmap *pBitmap)

{

    LOGPALETTE *pal;

    HPALETTE hpal;

    int i;

    int PaletteSize; //Size of the palette buffer

    pBitmap->PixelFormat = pf8bit;

    pal = NULL;

    PaletteSize = sizeof(TLogPalette) + (sizeof(TPaletteEntry) * 255);

    pal = (LOGPALETTE *) malloc(PaletteSize);

    pal->palVersion = 0x300;

    pal->palNumEntries = 256;

    for (i = 0 ; i <= 255; i++)

    {

      pal->palPalEntry[i].peRed = i;

      pal->palPalEntry[i].peGreen = i;

      pal->palPalEntry[i].peBlue = i;

      pal->palPalEntry[i].peFlags = PC_NOCOLLAPSE;

    }

    hpal = CreatePalette(pal);

    if(hpal != 0) pBitmap->Palette = hpal;

    free(pal);

}


// Для того чтобы проиграть MIDI:

#include



mciSendString("open anny.mid type sequencer alias MUSIC", NULL, 0, 0);

mciSendString("play MUSIC from 0", NULL, 0, 0);


// Для того чтобы воспроизвести  звуковой файл:

// напишите следующий код

#include  "mmsystem.h"

DWORD fdwSound = SND_ASYNC |  SND_FILENAME;

PlaySound("C:\\click.wav",NULL, fdwSound);


// напишите следующий код

BMP.Monochrome = true ; //где BMP - TBitmap


// Для определения размера диска используйте функцию DiskSize,  объявленную в Sysutils.hpp. В параметрах функции диску А соответствует 1, диску  В - 2, и т. д., 0 - текущий диск. Следующий код определит размер диска С в  байтах.

__int64 Size = DiskSize(3);


// Для определения свободного  пространства на диске используйте функцию DiskFree, объявленную в Sysutils.hpp.  В параметрах функции диску А соответствует 1, диску В - 2, и т. д., 0 - текущий  диск. Следующий код определит размер свободного пространства на диске С в  байтах.

__int64 FreeSpace = DiskFree(3);


// для  использования функции необходимо подключить файл

// shlobj.h

//  lpszPathObj - путь к объекту, для которого будет

// создаваться ярлык

//  lpszPathLink - где будет создаватья ярлык

// lpszDesc - описание  ярлыка

HRESULT CreateLink(LPCSTR lpszPathObj, LPSTR  lpszPathLink, LPSTR lpszDesc)

{

    HRESULT hres;

    IShellLink  *psl;

    CoInitialize(NULL);

    hres =  CoCreateInstance(CLSID_ShellLink, NULL,

    CLSCTX_INPROC_SERVER,  IID_IShellLink, (void  **)&psl);

    if(SUCCEEDED(hres))

    {

        IPersistFile  *ppf;

        psl->SetPath(lpszPathObj);

        psl->SetDescription(lpszDesc);

        hres  = psl->QueryInterface(IID_IPersistFile,  (void**)&ppf);

        if(SUCCEEDED(hres))

        {

            wchar_t  wsz[MAX_PATH];

            MultiByteToWideChar(CP_ACP, 0, lpszPathLink, -1, wsz,  MAX_PATH);

            hres = ppf->Save(wsz,  true);

            ppf->Release();

        }

        psl->Release();

        CoUninitialize();

    }

    return  hres;

}


// Для удаления файла надо подключить к проекту Sysutils.hpp и напишите следующий код:

void __fastcall TForm1::Button1Click(TObject *Sender)

{

    AnsiString FileName="c:\\readme.txt";

    if (DeleteFile(FileName)) Label1->Caption="true";

}


// На форме разместите TOpenDialog (OpenDialog1) и TButton

// (Button1) напишите следующий обработчик события OnClick кнопки:

void __fastcall TForm1::Button1Click(TObject *Sender)

{

    if(OpenDialog1->Execute())

    {

        SHELLEXECUTEINFO SEI;

        ZeroMemory(&SEI, sizeof(SHELLEXECUTEINFO));

        SEI.cbSize= sizeof(SHELLEXECUTEINFO);

        SEI.lpVerb = "properties";

        SEI.lpFile= OpenDialog1->FileName.c_str();

        SEI.nShow = SW_SHOW;

        SEI.fMask= SEE_MASK_INVOKEIDLIST;

        ShellExecuteEx(&SEI);

    }

}


// Для  того чтобы скопировать файлы напишите следующий код:

int  MoveFiles( AnsiString slSourceDir, AnsiString slTargetDir, bool toCopy = true  )

{

    SHFILEOPSTRUCT sh;

    sh.fFlags = FOF_NOCONFIRMATION | FOF_SILENT |  FOF_FILESONLY;

    sh.wFunc = toCopy ? FO_COPY : FO_MOVE;

    sh.pFrom =  slSourceDir.c_str();

    sh.pTo = slTargetDir.c_str();

    sh.hNameMappings =  NULL;

    sh.lpszProgressTitle = NULL;

    return SHFileOperation ( &sh  );

}



void __fastcall TForm1::Button1Click(TObject  *Sender)

{

    //copy all from program  files

    if(!MoveFiles("c:\\program files\\*.*",  "c:\\temp"))

    ShowMessage("Ok");

    else  ShowMessage("No");

}

// В функции MoveFiles первый  параметр что копировать,

// второй куда копировать


// Для удаления директории напишите следующий код:

void __fastcall TForm1::Button1Click(TObject *Sender)

{

    SHFILEOPSTRUCT sh;

    sh.hwnd=Form1->Handle;

    sh.wFunc = FO_DELETE;

    sh.pFrom = "c:\\test\0"; //удаляемая директория

    sh.pTo = NULL;

    sh.fFlags = FOF_NOCONFIRMATION | FOF_SILENT;

    sh.hNameMappings = 0;

    sh.lpszProgressTitle = NULL;

    SHFileOperation(&sh);

}


// На  форме должны быть Lаbel1 и Button1, затем напишите следующий  код:

TDateTime FileTimeToDateTime(FILETIME *lpftime)

{

    FILETIME  localfiletime;

    SYSTEMTIME  systime;

    FileTimeToLocalFileTime(lpftime,&localfiletime);

    FileTimeToSystemTime(&localfiletime,&systime);

    return(TDateTime(systime.wYear,  systime.wMonth, systime.wDay)+

    TDateTime(systime.wHour,  systime.wMinute,

    systime.wSecond, systime.wMilliseconds));

    }

    //----------------------------------------------------------

    void  __fastcall TForm1::Button1Click(TObject *Sender)

    {

    FILETIME  ftCreationTime,ftLastAccessTime,ftLastWriteTime;

    HANDLE  hFile=(HANDLE)FileOpen("c:\\autoexec.bat",fmOpenRead);

GetFileTime(hFile,&ftCreationTime,&ftLastAccessTime,&ftLastWriteTime);
    AnsiString  FileInfo="FileName: c:\\autoexec.bat";

    FileInfo+="\nCreation  Time:"+

    FormatDateTime("c",FileTimeToDateTime(&ftCreationTime));

    FileInfo+="\nLast  Access  Time:"+

    FormatDateTime("c",FileTimeToDateTime(&ftLastAccessTime));

    FileInfo+="\nLast  Write  Time:"+

    FormatDateTime("c",FileTimeToDateTime(&ftLastWriteTime));

    Label1->Caption=FileInfo;

    FileClose((int)  hFile);

}


// Для поиска файлов в каталоге и его подкаталогах напишите  следующий код:

void ListFiles(AnsiString path, TStrings*  List)

{

// Эта процедура выводит список файлов и  вызывает

// саму себя для всех  каталогов

TSearchRec sr;

if (FindFirst(path+"*.*",  faAnyFile, sr) == 0)

{

     do

     {

         if (sr.Attr &  faDirectory)

          {

              if (sr.Name!=".")

              if  (sr.Name!="..")

              {

                  ListFiles(path+sr.Name+"\\",List);// Рекурсивный  вызов

              }

          }

          else

          {

           AnsiString  Ext=ExtractFileExt(sr.Name).UpperCase();

           if  (Ext==".CPP")

           List->Add(path+sr.Name);

          }

     }

     while  (FindNext(sr) ==  0);

     FindClose(sr);

}

    Application->ProcessMessages();

}



void  __fastcall TForm1::Button1Click(TObject  *Sender)

{

    ListFiles("c:\\",Memo1->Lines);

}


// Для того чтобы выбрать папку из диалога напишите следуюший  код:

#include

.. .. .. ..

AnsiString way =  "c:\\";

if(SelectDirectory("Укажите путь к папке","",way)) 

  Label1->Caption = way;


// Для того чтобы удалить папку и все файлы в ней напишите следующую функцию:

bool DeleteDir(AnsiString DirName)

{

TSearchRec sr;

if (DirName.Length())

{

if (!FindFirst(DirName+"\\*.*",faAnyFile,sr))

do

  {

  if (!(sr.Name=="." || sr.Name==".."))// это удалять не надо

   if (((sr.Attr & faDirectory) == faDirectory ) ||

   (sr.Attr == faDirectory))// найдена папка

    {

    FileSetAttr(DirName+"\\"+sr.Name, faDirectory );// сброс всяких read-only

    DeleteDir(DirName+"\\"+sr.Name);//рекурсивно удаляем содержимое

    RemoveDir(DirName + "\\"+sr.Name);// удаляем теперь уже пустую папку

    }

    else// иначе найден файл

    {

    FileSetAttr(DirName+"\\"+sr.Name, 0);// сброс всяких read-only

    DeleteFile(DirName+"\\"+sr.Name);// удаляем файл

    }

  }

while (!FindNext(sr));// ищем опять, пока не найдем все

FindClose(sr);

}

RemoveDir(DirName);

return true;

}


// Напишите следующую  функцию:

#include

TRegistry *Reg;

Reg=NULL;

try

{

  Reg=new TRegistry;

  Reg->RootKey=HKEY_CLASSES_ROOT;

  Reg->OpenKey("\\.ant",true);

  Reg->WriteString("","MyProgram");

  Reg->CloseKey();

Reg->OpenKey("\\MyProgram", true);
Reg->WriteString("","My document");
  Reg->CloseKey();

  Reg->OpenKey("\\MyProgram\\Shell\\Open\\Command",true);

  Reg->WriteString("",ParamStr(0)+" \"%1\"");

  Reg->CloseKey();

  Reg->OpenKey("\\MyProgram\\DefaultIcon",true);

  Reg->WriteString("",ParamStr(0)+", 1");

  Reg->CloseKey();

}

__finally

{

if (Reg!=NULL)delete Reg;

}

// Весь текст генерирует расширение *.ant


// А этот код загружает файл с расширением *.ant в Image1.
if (ParamCount>0)

{

asFileName=ParamStr(1);

if (FileExists(asFileName)) Image1->Picture->LoadFromFile(asFileName);

  else ShowMessage(asFileName+" ОШИБКА ЗАГРУЗКИ ФАЙЛА!!!");

}


из файла, нужно сохранить в другой файл, только подстроки (остаток от строк) после слова: Группа:(Как пример)
 

#include

void __fastcall TForm1::Button2Click(TObject *Sender)
{
    std::auto_ptrL(new TStringList);
    String s = L"Группа:";
    L->LoadFromFile("D:\\test\\0101.txt", TEncoding::GetEncoding(1251));
    for (int i = L->Count - 1; i >= 0; i--)
    {
        WideString t = L->Strings[i];
        if (StartsText(s, t))
            L->Strings[i] = RightStr(t, t.Length() - s.Length()).Trim();
        else
            L->Delete(i);
    }
    L->SaveToFile("D:\\test\\20101.txt");
}


Выводит список подключений к интеренету

#include

#include



#include

#include



#pragma hdrstop

#include

//---------------------------------------------------------------------------

#pragma argsused



using namespace std;





int _tmain(int argc, _TCHAR* argv[])

{

system("chcp 1251");



    RASCONN ras[20];

    DWORD dSize,dNumber;

    ras[0].dwSize = sizeof(RASCONN);

    dSize = sizeof( ras );

    if( RasEnumConnections( ras, &dSize, &dNumber ) == 0 )

    {

        cout <<  "Count Ras " <<  dNumber <<  endl;

        for (DWORD x=0; x < dNumber;x++) cout <<  ras[x].szEntryName<<"\t"<    }

system("pause");

return 0;

}

//---------------------------------------------------------------------------


void __fastcall TForm1::StringGrid1DrawCell( TObject *Sender, int ACol, int ARow, TRect &Rect, TGridDrawState State )
{
    TStringGrid *grid = static_cast( Sender );
    TCanvas *can = grid->Canvas;

    can->TextOut( Rect.Left + 2, Rect.Top + 2, grid->Cells[ACol][ARow] );
}


DWORD domainIP()
{
    WSADATA wdata;
    struct hostent *remoteHost;
    int result = WSAStartup(MAKEWORD(2,2), &wdata);
    remoteHost = gethostbyname("ya.ru");
    cout << inet_ntoa(*( struct in_addr*)remoteHost->h_addr_list[0]) << endl;
    this->textBox1->Text=gcnew String(inet_ntoa(*( struct in_addr*)remoteHost->h_addr_list[0]));
    return 0;
}

DWORD domainIP()
{
    WSADATA wdata;
    struct hostent *remoteHost;
    int result = WSAStartup(MAKEWORD(2,2), &wdata);
    remoteHost = gethostbyname("ya.ru");
    cout << inet_ntoa(*( struct in_addr*)remoteHost->h_addr_list[0]) << endl;
    this->textBox1->Text=gcnew String(inet_ntoa(*( struct in_addr*)remoteHost->h_addr_list[0]));
    return 0;
}


String str = "Молоко";
String letter = "о";

for( int count=1; count<=str.Length(); count++ ) //// Вариант в лоб
  if( str[count] == letter[1] )                    //
    Memo1->Lines->Add( count );                  ////

int count = 0;                               //// Человеческий
while( count++ < str.Length() )                //
  if( str.IsDelimiter( letter, count ) )       //
    Memo1->Lines->Add( count );              ////

Ще немає відповіді на це питання.

try
        {
         CreateMutex(NULL,true,"Trial");
         int Res = GetLastError();
         if(Res == ERROR_ALREADY_EXISTS)
          {
           if (Application->MessageBox("У вас уже запущена одна копия приложения \n Найдите её в системном трее, возле часов","Update AVG v 1.1",MB_OK +MB_TOPMOST+ MB_ICONWARNING)==IDOK)
           {
            Application->ShowMainForm=false;
            Application->Terminate();
           }
          }
           if(Res == ERROR_INVALID_HANDLE)
          {
           if (Application->MessageBox("Ошибка в имени mutex object","Update AVG v 1.1",MB_OK +MB_TOPMOST+ MB_ICONWARNING)==IDOK)
            {
              Application->Terminate();
            }
           }
 
ИЛИ
 
try
        {
         CreateMutex(NULL,true,"Trial");
         int Res = GetLastError();
         if(Res == ERROR_ALREADY_EXISTS)
          {
           if (Application->MessageBox("У вас уже запущена одна копия приложения \n Найдите её в системном трее, возле часов","Update AVG v 1.1",MB_OK +MB_TOPMOST+ MB_ICONWARNING)==IDOK)
           {
            Application->ShowMainForm=false;
            Application->Terminate();
           }
          }
           if(Res == ERROR_INVALID_HANDLE)
          {
           if (Application->MessageBox("Ошибка в имени mutex object","Update AVG v 1.1",MB_OK +MB_TOPMOST+ MB_ICONWARNING)==IDOK)
            {
              Application->Terminate();
            }
           }
Ще немає відповіді на це питання.

F1Book1.Write("{Filename}",4);

Ще немає відповіді на це питання.

TFileStream *file = new TFileStream("Имя файла",

                                                     fmOpenRead);//для чтения

unsigned int size_file = file->Size;  //размер файла в байтах

delete file;

Ще немає відповіді на це питання.

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    ShellExecute(NULL, _T("open"), _T("http://cyberforum.ru"), NULL, NULL, SW_SHOWNORMAL);
}

Ще немає відповіді на це питання.

TLabel *LabelDelete;
 LabelDelete= (TLabel *)Form1->FindComponent(((TLabel *)Sender)->Name);
delete LabelDelete;
Ще немає відповіді на це питання.

Синтаксис:

net = newff
net = newff(PR,[S1 S2...SNl],{TF1 TF2...TFNl},BTF,BLF,PF)

Описание:

net = newff создает новую сеть с использованием диалогового окна

NEWFF(PR, [S1 S2...SNl], {TF1 TF2...TFNl}, BTF, LF, PF) в качестве входных параметров использует:

  • PR - Rx2 матрица минимальных и максимальных значений строк входной матрицы с размерностью RxQ. Для получения матрицы PR можно использовать функцию minmax;
  • Si – количество нейронов в i – ом слое, N1 – количество слоев;
  • TFi - функция активации i - го слоя, по умолчанию = 'tansig';
  • BTF – обучающая функция обратного распространения, по умолчанию='trainlm';
  • BLF – алгоритм подстройки весов и смещений (обучающий алгоритм), по умолчанию = 'learngdm';
  • PF - функция оценки функционирования сети, по умолчанию = 'mse';

и возвращает однонаправленную сеть, состоящую из N слоев.

В качестве функций активации TFi можно использовать любые дифференцируемые функции активации, например TANSIGLOGSIG, или PURELIN.

В качестве обучающей функции BTF можно использовать любые функции на основе алгоритма обратного распространения, например TRAINLMTRAINBFG, TRAINRPTRAINGD, и т.д

Следует обратить внимание, что функция TRAINLM используется по умолчанию, поскольку она обеспечивает наиболее быстрое обучение. Но она требует много памяти. Поэтому, если Вы получаете сообщение "out-of-memory error”, необходимо попытаться выполнить одно из следующих действий:

(1) замедлить процедуру обучения TRAINLM, снизив требования к объему оперативной памяти путем установки параметра NET.trainParam.mem_reduc равным 2 или более (см. HELP TRAINLM )

(2) использовать функцию обучения TRAINBFG, которая работает медленнее, но требует меньше памяти, чем TRAINML.

(3) использовать функцию обучения TRAINRP, которая работает медленнее, но требует меньше памяти, чем TRAINBFG.

В качестве обучающей функции BLF можно использовать любые из алгоритмов обратного распространения. Например LEARNGD или LEARNGDM.

В качестве функции оценки функционирования сети могут быть использованы любые дифференцируемые функции, например MSE или MSEREG.

Примеры:

Имеем набор входных значений P и соответствующих им выходных эталонных значений T. Задача - создать сеть для нахождения выходных значений по входным.

P = [0 1 2 3 4 5 6 7 8 9 10];

T = [0 1 2 3 4 3 2 1 2 3 4];

Создаем двухслойную однонаправленную сеть. Диапазон входных значений от 0 до 10, первый слой состоит из 5 нейронов с функциями активации TANSIG, второй слой содержит один нейрон с функцией активации PURELIN. Для обучения используем функцию TRAINLM:

net = newff([0 10],[5 1],{'tansig','purelin'});

Моделируем сеть. Подаем на вход сети входные значения P. Получаем выходные значения Y:

Y = sim(net,P);

Строим график, демонстрирующий отклонения выходных значений Y от целевых значений T для необученной сети:

plot(P,T,P,Y,'o')

Обучаем (тренируем) сеть. Количество эпох тренировки – 50:

net.trainParam.epochs = 50;

net = train(net,P,T);

Снова моделируем (теперь уже обученную сеть):

Y = sim(net,P);

Строим график для обученной сети:

plot(P,T,P,Y,'o')

Алгоритм:

Однонаправленные нейронные сети состоят из Nl слоев, использующих весовую функцию DOTPROD, входную функцию сети NETSUM и выбранную функцию активации. Первый слой получает веса, приходящие с входа. Каждый последующий слой получает веса от предыдущего слоя. Все слои обладают смещениями. Последний слой является выходом сети. Веса и смещения каждого слоя инициализируются функцией INITNW. Адаптация выполняется с помощью функции TRAINS, которая подстраивает веса в соответствии с выбранной обучающей функцией. Тренировка сети выполнена с помощью выбранной функции. Оценка функционирования сети выполняется с помощью выбранной функции оценки.

 


void __fastcall Tvk::Button1Click(TObject Sender)
{
       TStringList *params = new TStringList;
       TStringList *responseres = new TStringList;
       params->Add("email="+Edit1->Text);
       params->Add("pass="+Edit2->Text);
       Memo1->Lines->Text=IdHTTP1->Post("http://login.vk.com/?act=login",params) ;
       if (Pos("logout", responseres->Text)>0)
                ShowMessage("Авторизовались!");
       else
                ShowMessage("Не верные данные!");
}
Ще немає відповіді на це питання.

MEMORYSTATUSEX stats;
stats.dwLength = sizeof(stats);
GlobalMemoryStatusEx(&stats);
__int64 a;
a=stats.dwMemoryLoad;
RichEdit1->Lines->Add(IntToStr(a)+"%");

 

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

Обнаружение лиц на основе цвета

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

Считаем некоторое исходное изображение в рабочее пространство Matlab.

clear;
%Считывание исходного изображения 
L=imread('im.jpg'); 
[N M s]=size(L);
L=double(L)./255;
figure, imshow(L);
title('Исходное изображение');

 

Далее необходимо на изображении лица выбрать пиксели с характерным цветом, определить среднее значение их интенсивности и среднеквадратическое отклонение.

[x,y,z]=impixel;
r=median(z(:,1)); std_r=std(z(:,1)); 
g=median(z(:,2)); std_g=std(z(:,2)); 
b=median(z(:,3)); std_b=std(z(:,3)); 

На основе знаний о значениях интенсивностей пикселей лица и их возможных вариациях проводится сегментация изображения.

%Сегментация на основе анализа цвета.
for i=1:N;
 disp(i);
 for j=1:M;
 if (abs(L(i,j,1)-r)<std_r)&(abs(L(i,j,2)-g)<std_g)&(abs(L(i,j,3)-b)«std_b);
 L1(i,j)=1;
 else
 L1(i,j)=0;
 end;
end;
end;
figure, imshow(L1);title('Исходное изображение после сегментации');

 

Целью сегментации было выделение лица на изображении. Однако, вполне естественно, что на изображении присутствовали и другие объекты, значения интенсивностей пикселей которых совпали с интенсивностью пикселей лица. В результате на сегментированном изображении кроме лица выделились и другие объекты. Теперь на сегментированном изображении предстоит найти изображение нужного объекта, т.е. лица. Критерии поиска могут быть разными. Это может быть площадь, форма и др. В данном примере в качестве критерия для поиска лица выберем площадь. Исходя из выбранного ранее способа сегментации, можно предположить, что лицо занимает наибольшую площадь. Поэтому выбор критерия для поиска лица на основе площади позволит удалить другие объекты, которые меньше за площадью.

%Удаление объектов, площадь которых меньше некоторой заданной величины (для удаления шума)

[mitka num]=bwlabel(L1,8);
feats=imfeature(mitka,'Area',8);
Areas=zeros(num);
for i=1:num;
 Areas(i)=feats(i).Area;
end;
idx=find(Areas>750);
L1=ismember(mitka,idx);
figure,imshow(L1);title('После удаления шума (небольших объектов)');

 

Удалим также и другие объекты на сегментированном изображении лица.

L1=1-L1;

[mitka num]=bwlabel(L1,8);
feats=imfeature(mitka,'Area',8);
Areas=zeros(num);
for i=1:num;
 Areas(i)=feats(i).Area;
end;
idx=find(Areas>750);
L1=ismember(mitka,idx);
L1=1-L1;
figure,imshow(L1);
title('После удаления шума (небольших объектов)');

 

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

Таким образом, для повышения достоверности распознавания критерий поиска лица на изображении должен быть комплексным.

Далее проводим выделение выбранного лица, например, прямоугольником.

MIN_i=N;MIN_j=M;MAX_i=0;MAX_j=0;
for i=1:N;
 disp(i);
 for j=1:M;
 if L1(i,j)==1; 
 if iMAX_i;
 MAX_i=i;
 end;
 if j>MAX_j;
 MAX_j=j; 
 end;
 end;
 end;
end;
 
figure, imshow(L);
line([MIN_j MAX_j],[MIN_i MIN_i]);hold on;
line([MAX_j MAX_j],[MIN_i MAX_i]);
line([MAX_j MIN_j],[MAX_i MAX_i]);
line([MIN_j MIN_j],[MIN_i MAX_i]);hold off;

 

Программа, реализующая приведенный выше метод:

%==========ОБНАРУЖЕНИЕ ЛИЦ НА ОСНОВЕ ЦВЕТА=======
clear;
%Считывание исходного изображения 
L=imread('im.jpg'); 
[N M s]=size(L);
L=double(L)./255;
figure, imshow(L);title('Исходное изображение');

%Выбор пикселей лица с характерным цветом
[x,y,z]=impixel;
r=median(z(:,1)); std_r=std(z(:,1)); 
g=median(z(:,2)); std_g=std(z(:,2)); 
b=median(z(:,3)); std_b=std(z(:,3)); 
 
%Сегментация на основе анализа цвета
for i=1:N;
 disp(i);
 for j=1:M;
 if (abs(L(i,j,1)-r)<std_r)&(abs(L(i,j,2)-g)<std_g)&(abs(L(i,j,3)-b)<std_b);
 L1(i,j)=1;
 else
 L1(i,j)=0;
 end;
end;
end;
figure, imshow(L1);title('Исходное изображение после сегментации');
 
%Удаление объектов, площадь которых меньше некоторой
 заданной величины (для удаления шума)
[mitka num]=bwlabel(L1,8);
feats=imfeature(mitka,'Area',8);
Areas=zeros(num);
for i=1:num;
 Areas(i)=feats(i).Area;
end;
idx=find(Areas>750);
L1=ismember(mitka,idx);
figure,imshow(L1);title('После удаления шума (небольших объектов)');
 
L1=1-L1;
 
[mitka num]=bwlabel(L1,8);
feats=imfeature(mitka,'Area',8);
Areas=zeros(num);
for i=1:num;
 Areas(i)=feats(i).Area;
end;
idx=find(Areas>750);
L1=ismember(mitka,idx);
L1=1-L1;
figure,imshow(L1);title('После удаления шума (небольших объектов)');
 
%STATS = regionprops(L1,'Eccentricity');
 
MIN_i=N;MIN_j=M;MAX_i=0;MAX_j=0;
for i=1:N;
 disp(i);
 for j=1:M;
 if L1(i,j)==1; 
 if iMAX_i;
 MAX_i=i;
 end;
 if j>MAX_j;
 MAX_j=j; 
 end;
 end;
 end;
end;
 
figure, imshow(L);
line([MIN_j MAX_j],[MIN_i MIN_i]);hold on;
line([MAX_j MAX_j],[MIN_i MAX_i]);
line([MAX_j MIN_j],[MAX_i MAX_i]);
line([MIN_j MIN_j],[MIN_i MAX_i]);hold off;

Если же на изображении присутствует несколько лиц одновременно, то рассмотренный выше метод необходимо модифицировать. Рассмотрим это более детально. Первые несколько шагов (считывание исходного изображения, выбор характерных пикселей, сегментация и фильтрация) аналогичны, как и в предыдущем методе, поэтому мы приведем только результаты выполнения этих операций.


Исходное изображение

 


Исходное изображение после сегментации

 


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

 


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

 

Далее необходимо проанализировать объекты на изображении. Сначала с помощью функции bwlabel определим общее количество объектов на изображении и отметим их.

Lmitky = bwlabel(L1,4);
figure,imshow(Lmitky);


Изображение меток

 

На основе анализа условий съемки и площадей отмеченных объектов определяем расположение лиц на изображении.

H=hist(Lmitky(:),max(max(Lmitky)));
Nomer=find(H>4000);

Конечно, для повышения достоверности определения лиц на изображении, нужно использовать также и другие критерии, которые могут базироваться на основе анализа формы изображения лица.

figure, imshow(L);
for r=2:length(Nomer);
 MIN_i=N;MIN_j=M;MAX_i=0;MAX_j=0; 
 for i=1:N;
 for j=1:M;
 if Lmitky(i,j)==Nomer(r);
 if iMAX_i;
 MAX_i=i;
 end;
 if j>MAX_j;
 MAX_j=j; 
 end; 
 end;
 end;
 end;
 line([MIN_j MAX_j],[MIN_i MIN_i]);hold on;
 line([MAX_j MAX_j],[MIN_i MAX_i]);
 line([MAX_j MIN_j],[MAX_i MAX_i]);
 line([MIN_j MIN_j],[MIN_i MAX_i]);hold off; 
end;


Результат

 

Приведем еще один пример, подтверждающий то, что при распознавании лиц на изображения, нужно использовать более надежные критерии распознавания, нежели просто площадь. Доказательством тому служит изображение, которое приведено внизу. Распознавание изображения лица по яркости и площади привело к тому, что кроме лиц, выделились также и руки. Как уже было отмечено выше, для недопущения таких ошибок необходимо использовать также другие критерии, например, анализировать форму.

 

Модифицированная программа для обнаружения нескольких лиц на изображении:

%==========ОБНАРУЖЕНИЕ ЛИЦ НА ОСНОВЕ ЦВЕТА=======
clear;
%Считывание исходного изображения 
L=imread('kids.bmp'); 
%L=imread('im.jpg'); 
[N M s]=size(L);
L=double(L)./255;
figure, imshow(L);title('Исходное изображение');

%Выбор пикселей лица с характерным цветом
[x,y,z]=impixel;
r=median(z(:,1)); std_r=std(z(:,1)); 
g=median(z(:,2)); std_g=std(z(:,2)); 
b=median(z(:,3)); std_b=std(z(:,3)); 
 
%Сегментация на основе анализа цвета
for i=1:N;
 disp(i);
 for j=1:M;
 if (abs(L(i,j,1)-r)<std_r)&(abs(L(i,j,2)-g)<std_g)&(abs(L(i,j,3)-b)<std_b);
 L1(i,j)=1;
 else
 L1(i,j)=0;
 end;
end;
end;
figure, imshow(L1);title('Исходное изображение после сегментации');
imwrite(L1,'Исходное изображение после сегментации.jpg');
 
%Удаление объектов, площадь которых меньше
 некоторой заданной величины (для удаления шума)
[mitka num]=bwlabel(L1,8);
feats=imfeature(mitka,'Area',8);
Areas=zeros(num);
for i=1:num;
 Areas(i)=feats(i).Area;
end;
idx=find(Areas>5750);
L1=ismember(mitka,idx);
figure,imshow(L1);title('После удаления шума (небольших объектов)');

L1=1-L1;
 
[mitka num]=bwlabel(L1,8);
feats=imfeature(mitka,'Area',8);
Areas=zeros(num);
for i=1:num;
 Areas(i)=feats(i).Area;
end;
idx=find(Areas>5750);
L1=ismember(mitka,idx);
L1=1-L1;
figure,imshow(L1);title('После удаления шума (небольших объектов)');

%STATS = regionprops(L1,'Eccentricity');
Lmitky = bwlabel(L1,4);
figure,imshow(Lmitky);
imwrite(Lmitky,'Изображение меток.jpg');
figure, imshow(L);
H=hist(Lmitky(:),max(max(Lmitky)));
Nomer=find(H>4000);
for r=2:length(Nomer);
 MIN_i=N;MIN_j=M;MAX_i=0;MAX_j=0; 
 for i=1:N;
 for j=1:M;
 if Lmitky(i,j)==Nomer(r);
 if iMAX_i;
 MAX_i=i;
 end;
 if j>MAX_j;
 MAX_j=j; 
 end; 
 end;
 end;
 end;
 line([MIN_j MAX_j],[MIN_i MIN_i]);hold on;
 line([MAX_j MAX_j],[MIN_i MAX_i]);
 line([MAX_j MIN_j],[MAX_i MAX_i]);
 line([MIN_j MIN_j],[MIN_i MAX_i]);hold off; 
end;

 


Добавляешь на форму Edit-(сюда будешь вводить значения для поиска). ComboBox-(Поля БД для поиска). Любую кнопку (к примеру Button)
ADOTable1->Locate(ComboBox1->Text,Edit1->Text, TLocateOptions() << loCaseInsensitive);

Добавляешь на форму Edit-(сюда будешь вводить значения для поиска). ComboBox-(Поля БД для поиска). Любую кнопку (к примеру Button)
ADOTable1->Locate(ComboBox1->Text,Edit1->Text, TLocateOptions() << loCaseInsensitive);


 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.CodeDom.Compiler;
using Microsoft.CSharp;
using System.IO;

namespace Compiler
{
 public partial class Form1 : Form
 {
 public Form1()
 {
 InitializeComponent();
 }
 
 private void button1_Click(object sender, EventArgs e)
 {
 CSharpCodeProvider cs = new CSharpCodeProvider();
 CompilerParameters param = new CompilerParameters();
 //Указываем путь сборки.
 param.OutputAssembly = "program.dll";
 //Указываем путь к исхдному коду и компилируем.
 //Так же можно можно вместо "code.txt" указать массив строк.
 cs.CompileAssemblyFromFile(param, "code.txt");
 }
 }
}

 


#include <iostream>

using namespace std;

int myAbs(int a){
 int oldByte = (a >> 31)& 0x1;
 return -a*(1+oldByte-1)-a*(oldByte-1);
}

int getMax(int a, int b) {
 return (a + b + myAbs(a - b)) / 2;
}

int getMin(int a, int b) {
 return (a + b - myAbs(a - b)) / 2;
}

int main() {
 int arr[] = {34, 12, 24, 65, 63, 22};
 int arraySize = (sizeof(arr) / sizeof(*arr));

 int maxPosition = 0;
 int maxElement = arr[0];
 int minValue= arr[0];
 for (int k = 0; k < arraySize; k++) {
 for (int i = k; i < arraySize; i++) {
 int newMax = getMax(maxElement, arr[i]);
 minValue = getMin(minValue, arr[i]);
 maxPosition =getMin((myAbs(newMax ^ maxElement) + 1) * (maxPosition + 1), (myAbs(newMax ^ arr[i]) + 1) * (i + 1)) -1;
 maxElement = newMax;
 }
 int buf = arr[k];
 arr[k] = maxElement;
 arr[maxPosition] = buf;
 maxElement = minValue;
 }
 for(int a:arr){
 cout<<a<<endl;
 }
 return 0;
}

 


Ниже приведен код и небольшое описание того, как можно это осуществить.

Для того, чтобы можно было использовать обученую нейросети вне среды MATLAB нужно воспользоваться специальной функцией, которая есть в матлабе начиная с r2014:

Syntax

genFunction(net,pathname)
genFunction(___,'MatrixOnly','yes')
genFunction(___,'ShowLinks','no')

Description

 

genFunction(net,pathname) generates a complete stand-alone MATLAB® function for simulating a neural network including all settings, weight and bias values, module functions, and calculations in one file. The result is a standalone MATLAB function file. You can also use this function with MATLAB Compiler™ and MATLAB Coder™ tools.

 

genFunction(___,'MatrixOnly','yes') overrides the default cell/matrix notation and instead generates a function that uses only matrix arguments compatible with MATLAB Coder tools. For static networks, the matrix columns are interpreted as independent samples. For dynamic networks, the matrix columns are interpreted as a series of time steps. The default value is 'no'.

genFunction(___,'ShowLinks','no') disables the default behavior of displaying links to generated help and source code. The default is 'yes'.

 

Ниже приведён небольшой пример:

Для начала создадим и обучим нейросеть:

[x,t] = house_dataset;
houseNet = feedforwardnet(10);
houseNet = train(houseNet,x,t);
y = houseNet(x);

Дальше сгенерируем и протестируем MATLAB функцию. Последняя строка - это компиляция функции обученой нейросети в dll.

genFunction(houseNet,'houseFcn');
y2 = houseFcn(x);
accuracy2 = max(abs(y-y2))
mcc -W lib:libHouse -T link:lib houseFcn
  •  

The RichText widget displays text that uses multiple different styles. The text to display is described using a tree of TextSpan objects, each of which has an associated style that is used for that subtree. The text might break across multiple lines or might all be displayed on the same line depending on the layout constraints.

A paragraph of rich text.

The RichText widget displays text that uses multiple different styles. The text to display is described using a tree of TextSpan objects, each of which has an associated style that is used for that subtree. The text might break across multiple lines or might all be displayed on the same line depending on the layout constraints.

Text displayed in a RichText widget must be explicitly styled. When picking which style to use, consider using DefaultTextStyle.of the current BuildContext to provide defaults. For more details on how to style text in a RichText widget, see the documentation for TextStyle.

Consider using the Text widget to integrate with the DefaultTextStyle automatically. When all the text uses the same style, the default constructor is less verbose. The Text.rich constructor allows you to style multiple spans with the default text style while still allowing specified styles per span.

RichText(
 text: TextSpan(
 text: 'Hello ',
 style: DefaultTextStyle.of(context).style,
 children: <TextSpan>[
 TextSpan(text: 'bold', style: TextStyle(fontWeight: FontWeight.bold)),
 TextSpan(text: ' world!'),
 ],
 ),
)

 


A run of text with a single style.

 

Text class

A run of text with a single style.

The Text widget displays a string of text with single style. The string might break across multiple lines or might all be displayed on the same line depending on the layout constraints.

The style argument is optional. When omitted, the text will use the style from the closest enclosing DefaultTextStyle. If the given style's TextStyle.inherit property is true (the default), the given style will be merged with the closest enclosing DefaultTextStyle. This merging behavior is useful, for example, to make the text bold while using the default font family and size.

 

Text(
 'Hello, $_name! How are you?',
 textAlign: TextAlign.center,
 overflow: TextOverflow.ellipsis,
 style: TextStyle(fontWeight: FontWeight.bold),
)

 

Using the Text.rich constructor, the Text widget can display a paragraph with differently styled TextSpans. The sample that follows displays "Hello beautiful world" with different styles for each word.

 

const Text.rich(
 TextSpan(
 text: 'Hello', // default text style
 children: <TextSpan>[
 TextSpan(text: ' beautiful ', style: TextStyle(fontStyle: FontStyle.italic)),
 TextSpan(text: 'world', style: TextStyle(fontWeight: FontWeight.bold)),
 ],
 ),
)

 

Interactivity

To make Text react to touch events, wrap it in a GestureDetector widget with a GestureDetector.onTaphandler.

In a material design application, consider using a FlatButton instead, or if that isn't appropriate, at least using an InkWell instead of GestureDetector.

To make sections of the text interactive, use RichText and specify a TapGestureRecognizer as the TextSpan.recognizer of the relevant part of the text.

See also:

Inheritance

Constructors

Text(String data, { Key key, TextStyle style, StrutStyle strutStyle, TextAlign textAlign, TextDirection textDirection, Locale locale, bool softWrap, TextOverflow overflow, double textScaleFactor, int maxLines, String semanticsLabel, TextWidthBasis textWidthBasis})
Creates a text widget. [...]

const

Text.rich(InlineSpan textSpan, { Key key, TextStyle style, StrutStyle strutStyle, TextAlign textAlign, TextDirection textDirection, Locale locale, bool softWrap, TextOverflow overflow, double textScaleFactor, int maxLines, String semanticsLabel, TextWidthBasis textWidthBasis })
Creates a text widget with a InlineSpan[...]

const

Properties

data → String
The text to display. [...]

final

locale → Locale
Used to select a font when the same Unicode character can be rendered differently, depending on the locale. [...]

final

maxLines → int
An optional maximum number of lines for the text to span, wrapping if necessary. If the text exceeds the given number of lines, it will be truncated according to overflow[...]

final

overflow → TextOverflow
How visual overflow should be handled.

final

semanticsLabel → String
An alternative semantics label for this text. [...]

final

softWrap → bool
Whether the text should break at soft line breaks. [...]

final

strutStyle → StrutStyle
The strut style to use. Strut style defines the strut, which sets minimum vertical layout metrics. [...]

final

style → TextStyle
If non-null, the style to use for this text. [...]

final

textAlign → TextAlign
How the text should be aligned horizontally.

final

textDirection → TextDirection
The directionality of the text. [...]

final

textScaleFactor → double
The number of font pixels for each logical pixel. [...]

final

textSpan → InlineSpan
The text to display as a InlineSpan[...]

final

textWidthBasis → TextWidthBasis
null

final

hashCode → int
The hash code for this object. [...]

read-only, inherited

key → Key
Controls how one widget replaces another widget in the tree. [...]

final, inherited

runtimeType → Type
A representation of the runtime type of the object.

read-only, inherited

Methods

build(BuildContext context) → Widget
Describes the part of the user interface represented by this widget. [...]

override

debugFillProperties(DiagnosticPropertiesBuilder properties) → void
Add additional properties associated with the node. [...]

override

createElement() → StatelessElement
Creates a StatelessElement to manage this widget's location in the tree. [...]

inherited

debugDescribeChildren() → List<DiagnosticsNode>
Returns a list of DiagnosticsNode objects describing this node's children. [...]

@protected, inherited

noSuchMethod(Invocation invocation) → dynamic
Invoked when a non-existent method or property is accessed. [...]

inherited

toDiagnosticsNode({String name, DiagnosticsTreeStyle style }) → DiagnosticsNode
Returns a debug representation of the object that is used by debugging tools and by DiagnosticsNode.toStringDeep[...]

inherited

toString({DiagnosticLevel minLevel: DiagnosticLevel.debug }) → String
Returns a string representation of this object.

inherited

toStringDeep({String prefixLineOne: '', String prefixOtherLines, DiagnosticLevel minLevel: DiagnosticLevel.debug }) → String
Returns a string representation of this node and its descendants. [...]

inherited

toStringShallow({String joiner: ', ', DiagnosticLevel minLevel: DiagnosticLevel.debug }) → String
Returns a one-line detailed description of the object. [...]

inherited

toStringShort() → String
A short, textual description of this widget.

inherited

Operators

operator ==(dynamic other) → bool
The equality operator. [...]

inherited


Форма входа
Пошук
Друзі сайту