Материал: Информационная система анализа типоразмерных характеристик объектов на гибридной аппаратной платформе

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

На протяжении всего жизненного цикла программного обеспечения может быть выявлено М0 отказов. Так же будут выявлены все N0 ошибок, которые были найдены до начала тестирования.

Общее число отказов M0 взаимосвязано с первоначальным числом ошибок N0 , соотношением:

 , (5.7)

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

Модель Муса предусматривает два вида времени:

-   суммарное время функционирования τ, которое учитывает
чистое время тестирования до контрольного момента, когда проводится оценка надежности;

-   оперативное время t - время выполнения программы, планируемое от контрольного момента и далее при условии, что дальнейшего устранения ошибок не будет (время безотказной работы в процессе эксплуатации).

Суммарное время функционирования τ предполагает:

-   интенсивность отказов пропорциональна числу неустраненных ошибок;

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

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

 , (5.8)

где t - время работы до отказа.

Если интенсивность отказов постоянна, то средняя наработка на отказ обратно пропорциональна интенсивности отказов.

Средняя наработка находится по формуле:

, (5.9)

где - средняя наработка на отказ до начала тестирования;

С - коэффициент сжатия тестов;

τ - суммарное время функционирования.

К примеру, если 1 ч тестирования равен 8 ч работы в реальных условиях, то коэффициент сжатия тестов равен 8.

 , (5.10)

где f - средняя скорость исполнения программы, отнесенная к числу операторов;

k - является коэффициентом проявления ошибок, который связывает частоту возникновения ошибок со «скоростью ошибок» (скорость, с которой бы встречались ошибки программы, если бы программа выполнялась линейно-последовательно по командам), значение определяют эмпирическим путем по однотипным программам, оно лежит в пределах от 1,54 10-7 до 3,99 · 10-7;

 - начальное число ошибок программы, его можно рассчитать по модели Шумана на основе статических данных.

Надежность R для оперативного периода вычисляется по формуле:

 , (5.11)

Предположим, что в системе работают 500 операторов, скорость работы системы равна 106 операторов в час. Система тестировалась 120 часов, за которые было выявлено 30 ошибок и 12 отказов.

По формуле (5.10) найдём среднюю наработку на отказ перед началом тестирования:

 

Среднюю наработку на отказ найдём по формуле (5.9):

221,45

Надежность для оперативного периода  равную 150 часам найдём по формуле (5.10):

.

5.3.2 Модель Коркорэна

Применение модели предполагает знание следующих ее показателей:

-     содержание изменяющейся вероятности отказов для различных источников ошибок и разную вероятность их исправления;

-     использование таких параметров, как результат только N испытаний, в которых наблюдается  ошибок i-го типа;

-     выявление в ходе N испытаний ошибки i-го типа появляется с вероятностью .


 , (5.12)

где N0 - число безотказных (или безуспешных) испытаний, выполненных в серии из N испытаний;- известное число типов ошибок.

Параметр Yi вычисляется из соотношения:

 ;

 .

где  - вероятность выявления при тестировании ошибки i-го типа.

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

Требуется найти вероятность безотказного выполнения программы на момент тестирования.

 

Надежность составляет 95,24%.

. ОБЗОР ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ

6.1 Панель администрирования


Для более удобного пользования в программе имеется меню навигации. Перед началом работы требуется подключиться к базе данных, затем выбрать один из пунктов меню: «Администрирование».

Рисунок 6.1 - Меню программы

Выбрав вкладку меню «DB» → «Connect» отправляется запрос на подключение к базе данных. Подключение совершается только при правильном заполнении значений в таблице, пример показан на рисунке 6.2.

Рисунок 6.2 - Таблица значении для подключения к БД

При входе в систему с правами администратора требуется пройти авторизацию (Рисунок 6.3).

Рисунок 6.3 - Процедура авторизации

Далее открывается форма позволяющая пользователю загружать в базу данных эталонные изображения. Используя данные эталоны будет производиться сортировка случайно сгенерированных изображений.

Рисунок 6.4 - Загрузка эталонных изображений

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

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

Рисунок 6.5 - Выбор изображения

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

На рисунке 6.6 представлен результат анализа изображения в графическом виде.

Рисунок 6.6 - Результат анализа изображения

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

Полученные результаты и данные изображений, подвергнутых обработке, заносятся и хранятся в базе данных.

Рисунок 6.7 - Данные об анализах объектов

6.2 Редактирование кода программы в Borland Delphi 7.0


Для внесения в программу различных изменений необходимо открыть файл проекта программы с помощью Borland Delphi 7.0. Кроме того, для внесения изменений в программный код необходимо зайти в раздел «Программный код» представленный на рисунке 6.8.

Рисунок 6.8 - Редактирование кода в Borland Delphi 7.0

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

заключение

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

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

Подобные системы можно применять на производстве (определение площади или периметра какого - либо объекта, отбор необходимых деталей среди множества различных объектов, например на конвейере).

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

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

Одним из известных методов определения количественно - качественных характеристик исследуемого объекта является использование лазерного и видео сканирования, но он требует обязательного прохождения объекта через специальные площадки.

С помощью бинарного и лазерного сканирования линейных размеров и конфигураций объекта получают его плоское и восстановленное «объемное» изображение.

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

Все перечисленные выше альтернативные решения являются более сложными и вынуждают применять специальное дорогостоящее оборудование.

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

Список использованных источников

1. Бьюли А. Изучаем SQL / А. Бьюли. - Санкт - Петербург - Москва: Символ - Плюс, 2007. - 312 с.

2. Визильтер Ю. В. Обработка и анализ изображений в задачах машинного зрения / Ю. В. Визильтер, С. Ю. Желтов, А. В. Бондаренко. - Москва: Физматкнига, 2010. - 672 с.

. Горелик А. Л. Методы распознавания / А. Л. Горелик, В. А. Скрипкин. - Москва: Высшая школа, 2004. - 264 с.

4. Гридин В. Н. Адаптивные системы технического зрения / В. Н. Гридин, В. С. Титов, М. И. Труфанов. - Санкт - Петербург: Наука, 2009. - 442 с.

5. Ерош, И. Л. Обработка и распознавание изображений в системах превентивной безопасности / И. Л. Ерош, М. Б. Сергеев, Н. В. Соловьев. - Санкт - Петербург , 2005. - 154 с.

6. Коржинский, С. Н. Изучаем Delphi [Электронный ресурс] / С. Н. Коржинский. - SNK Press Online, 2007. - 344 с. Режим доступа: #"896590.files/image086.gif">

Более подробно данная схема рассмотрена в главе 3.

Приложение Б

Структурная схема программно - аппаратной платформы


Общий вид структурной схемы программно - аппаратной платформы анализа типоразмерных характеристик объектов.

Приложение В

Листинг программы

unit Main;

interface, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, ExtCtrls, StdCtrls, ComCtrls, Grids, md5Hash, DB, mySQLDbTables,, DBCtrls, mySQLDirectQuery,MySQLBatch, ValEdit, Menus;= class(TForm): TLabel;: TLabel;: TListBox;: TListBox;: TPageControl;: TTabSheet;: TTabSheet;: TStringGrid;: TStringGrid;: TButton;: TButton;: TGroupBox;: TImage;: TButton;: TGroupBox;: TImage;: TStringGrid;: TDBGrid;: TValueListEditor;: TDataSource;: TmySQLTable;: TmySQLDatabase;: TButton;: TLabel;: TButton;: TmySQLQuery;: TmySQLTable;: TDataSource;: TShape;: TLabel;: TShape;: TLabel;: TShape;: TLabel;: TShape;: TLabel;: TMainMenu;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TLabel;: TDBNavigator;: TMenuItem;: TLabel;FormCreate(Sender: TObject);Button3Click(Sender: TObject);ListBox1DblClick(Sender: TObject);ListBox2Click(Sender: TObject);ListBox1Click(Sender: TObject);StringGridDrawCell(Sender: TObject; ACol, ARow: Integer;: TRect; State: TGridDrawState);StringGrid2DrawCell(Sender: TObject; ACol, ARow: Integer;: TRect; State: TGridDrawState);Button1Click(Sender: TObject);Button4Click(Sender: TObject);Button5Click(Sender: TObject);Button6Click(Sender: TObject);Connect1Click(Sender: TObject);Disconnect1Click(Sender: TObject);N3Click(Sender: TObject);Image3Click(Sender: TObject);N4Click(Sender: TObject);N5Click(Sender: TObject);FormClose(Sender: TObject; var Action: TCloseAction);DBGrid1CellClick(Column: TColumn);

{ Private declarations }

{ Public declarations };: TForm1;Unit2, tools;

{$R *.dfm}TForm1.FormCreate(Sender: TObject);;('images', form1.ListBox1);;TForm1.Button3Click(Sender: TObject);rnd:integer;.DBGrid1.Enabled:=False;.MainMenu1.Items.Find('Изображение').Find('Анализ').Enabled:=True;.Button6.Enabled:=True;(form1.StringGrid2);(form1.StringGrid1);(form1.StringGrid4);:= Random(Form1.ListBox1.Count);.ListBox2.Clear;.Caption := ExtractFileDir(ParamStr(0)) + '\\' + Form1.ListBox1.Items[rnd];(label9.Caption, form1.Image1);(ExtractFileDir(ParamStr(0)) + '\\area\area.bmp', form1.Image2);(form1.StringGrid1, form1.Image1);.Refresh;;TForm1.ListBox1DblClick(Sender: TObject);p:real;:integer;:string;.Button6.Enabled:=True;(form1.StringGrid2);(form1.StringGrid1);(form1.StringGrid4);.ListBox2.Clear;.Refresh;:= ExtractFileDir(ParamStr(0));(path + '\\area\\area.bmp', form1.Image2);.Label9.Caption := path + '\\' + Form1.ListBox1.Items[form1.ListBox1.ItemIndex];(form1.Label9.Caption, form1.Image1);(form1.StringGrid1, form1.Image1);;TForm1.ListBox2Click(Sender: TObject);Form1.ListBox2.Items.Count = Form1.ListBox1.Items.Count then.ListBox1.Selected[form1.ListBox2.ItemIndex];.ListBox1.ItemIndex:= form1.ListBox2.ItemIndex;.ListBox1.SetFocus;Click(ListBox1);.Refresh;;;TForm1.ListBox1Click(Sender: TObject);;

//выводим массив таблицыTForm1.StringGridDrawCell(Sender: TObject; ACol, ARow: Integer;: TRect; State: TGridDrawState);form1.StringGrid1.Cells[ACol,ARow]<>'' thenform1.StringGrid1.Cells[Acol, ARow] = '0' then.StringGrid1.Canvas.Brush.Color:=clYellow;.StringGrid1.Canvas.FillRect(Rect);.StringGrid1.Canvas.TextOut(Rect.Left,Rect.Top, form1.StringGrid1.Cells[Acol,Arow]);;Perimeter(form1.StringGrid1, Acol,Arow) = True then.StringGrid1.Canvas.Brush.Color:=clRed;.StringGrid1.Canvas.FillRect(Rect);.StringGrid1.Canvas.TextOut(Rect.Left,Rect.Top, form1.StringGrid1.Cells[Acol,Arow]);;Vertex(StringGrid1, Acol, Arow) = True then.StringGrid1.Canvas.Brush.Color:=clBlue;.StringGrid1.Canvas.FillRect(Rect);.StringGrid1.Canvas.TextOut(Rect.Left,Rect.Top, form1.StringGrid1.Cells[Acol,Arow]);;Extrema(StringGrid1, Acol, Arow) = True then.StringGrid1.Canvas.Brush.Color:=clPurple;.StringGrid1.Canvas.FillRect(Rect);.StringGrid1.Canvas.TextOut(Rect.Left,Rect.Top, form1.StringGrid1.Cells[Acol,Arow]);;Centroid(StringGrid1, Acol, Arow) = True then.StringGrid1.Canvas.Brush.Color:=clGreen;.StringGrid1.Canvas.FillRect(Rect);.StringGrid1.Canvas.TextOut(Rect.Left,Rect.Top, form1.StringGrid1.Cells[Acol,Arow]);;.StringGrid1.Canvas.Brush.Color:=clWhite;.StringGrid1.Canvas.FillRect(Rect);.StringGrid1.Canvas.TextOut(Rect.Left,Rect.Top, form1.StringGrid1.Cells[Acol,Arow]);;;TForm1.StringGrid2DrawCell(Sender: TObject; ACol, ARow: Integer;: TRect; State: TGridDrawState);form1.StringGrid2.Cells[ACol,ARow]<>'' thenform1.StringGrid2.Cells[Acol, ARow] = '0' then.StringGrid2.Canvas.Brush.Color:=clYellow;.StringGrid2.Canvas.FillRect(Rect);.StringGrid2.Canvas.TextOut(Rect.Left,Rect.Top, form1.StringGrid2.Cells[Acol,Arow]);;Perimeter(form1.StringGrid2, Acol,Arow) = True then.StringGrid2.Canvas.Brush.Color:=clRed;.StringGrid2.Canvas.FillRect(Rect);.StringGrid2.Canvas.TextOut(Rect.Left,Rect.Top, form1.StringGrid2.Cells[Acol,Arow]);;Vertex(StringGrid2, Acol, Arow) = True then.StringGrid2.Canvas.Brush.Color:=clBlue;.StringGrid2.Canvas.FillRect(Rect);.StringGrid2.Canvas.TextOut(Rect.Left,Rect.Top, form1.StringGrid2.Cells[Acol,Arow]);;Extrema(StringGrid2, Acol, Arow) = True then.StringGrid2.Canvas.Brush.Color:=clPurple;.StringGrid2.Canvas.FillRect(Rect);.StringGrid2.Canvas.TextOut(Rect.Left,Rect.Top, form1.StringGrid2.Cells[Acol,Arow]);;Centroid(StringGrid2, Acol, Arow) = True then.StringGrid2.Canvas.Brush.Color:=clGreen;.StringGrid2.Canvas.FillRect(Rect);.StringGrid2.Canvas.TextOut(Rect.Left,Rect.Top, form1.StringGrid2.Cells[Acol,Arow]);;.StringGrid2.Canvas.Brush.Color:=clWhite;.StringGrid2.Canvas.FillRect(Rect);.StringGrid2.Canvas.TextOut(Rect.Left,Rect.Top, form1.StringGrid2.Cells[Acol,Arow]);;;TForm1.Button1Click(Sender: TObject);List: TList;.mySQLDatabase1.ConnectionCharacterSet:='cp1251';.mySQLDatabase1.Host := Form1.ValueListEditor1.Values['HOST'];.mySQLDatabase1.UserName := Form1.ValueListEditor1.Values['USER'];.mySQLDatabase1.UserPassword:=form1.ValueListEditor1.Values['PASSWORD'];.mySQLDatabase1.Connect;.mySQLDatabase1.SelectDB(form1.ValueListEditor1.Values['DB']);.mySQLTable1.TableName:='list';.mySQLTable1.Open;form1.mySQLDatabase1.Connected = True then.MainMenu1.Items.Find('DB').Find('Connect').Visible:=False;.MainMenu1.Items.Find('DB').Find('Disconnect').Visible:=True;.MainMenu1.Items.Find('Изображение').Enabled:=True;.ListBox1.Enabled:=True;.Button5.Enabled:=True;.Button3.Enabled:=True;.Label3.Caption:='Connected';.Button1.Enabled := False;;;TForm1.Button4Click(Sender: TObject);.Show;;TForm1.Button5Click(Sender: TObject);.mySQLDatabase1.Disconnect;form1.mySQLDatabase1.Connected = False then.ListBox1.Enabled:=False;.MainMenu1.Items.Find('Изображение').Find('Анализ').Enabled:=False;.MainMenu1.Items.Find('DB').Find('Connect').Visible:=True;.MainMenu1.Items.Find('DB').Find('Disconnect').Visible:=False;.MainMenu1.Items.Find('Изображение').Enabled:=False;.Button5.Enabled:=False;.Label3.Caption:='Disconnected';.Button1.Enabled := True;.Button3.Enabled := False;.Button6.Enabled := False;(ExtractFileDir(ParamStr(0)) + '\\area\\area.bmp', form1.Image1);(ExtractFileDir(ParamStr(0)) + '\\area\\area.bmp', form1.Image2);(form1.StringGrid2);(form1.StringGrid1);;;TForm1.Button6Click(Sender: TObject);st:TStringList;,hash2,p,s,p2,s2,col_v,col_e,col_v2,col_e2:string;,parent:variant;.DBGrid1.Enabled:=True;:= TStringList.Create();.Clear;:= QuotedStr(getValHash(form1.StringGrid1));:= getValP(form1.StringGrid1);:= getValS(form1.StringGrid1);_v := getValVertex(form1.StringGrid1);_e := getValExtrems(form1.StringGrid1);.Add('SELECT * FROM benchmarks WHERE hash=' + hash + ';');.mySQLTable2.TableName := 'benchmarks';.mySQLTable2.Open;.mySQLQuery1.SQL := st;.mySQLQuery1.Active := True;:= form1.mySQLQuery1.FieldValues['path'];:= form1.mySQLQuery1.FieldValues['hash'];.mySQLQuery1.Active := False;path <> Null thenparent <> '-' then(path, form1.Image2);(form1.StringGrid2, form1.Image2);;:= QuotedStr(getValHash(form1.StringGrid2));:= getValP(form1.StringGrid2);:= getValS(form1.StringGrid2);('Совпадение с эталоном' + chr(13) + 'hash (изображения): ' + hash + chr(13) + 'hash (эталона): ' + hash2 + chr(13) + 'P (изображения): ' + p + chr(13)+ 'P (эталона): ' + p2 + chr(13) + 'S (изображения): ' + s + chr(13)+ 'S (эталона): ' + s2);.mySQLDatabase1.Execute('INSERT INTO list VALUES(0,' + hash + ',' + p + ','+ s + ',' + col_v + ',' + col_e + ',' + QuotedStr(parent) + ',' + QuotedStr(StringReplace(form1.Label9.Caption, '\', '\\',[rfReplaceAll, rfIgnoreCase])) + ');');.Clear;.Add('SELECT * FROM benchmarks WHERE p=' + p + ' and s=' + s + ';');.mySQLQuery1.SQL := st;.mySQLQuery1.Active:=True;:= form1.mySQLQuery1.FieldValues['path'];:= form1.mySQLQuery1.FieldValues['hash'];path <> Null thenparent <> '-' then(path, form1.Image2);(form1.StringGrid2, form1.Image2);;:= QuotedStr(getValHash(form1.StringGrid2));:= getValP(form1.StringGrid2);:= getValS(form1.StringGrid2);('Совпадение с эталоном' + chr(13) + 'hash (изображения): ' + hash + chr(13) + 'hash (эталона): ' + hash2 + chr(13) + 'P (изображения): ' + p + chr(13)+ 'P (эталона): ' + p2 + chr(13) +'S (изображения): ' + s + chr(13)+ 'S (эталона): ' + s2);.mySQLDatabase1.Execute('INSERT INTO list VALUES(0,' + hash + ',' + p + ','+ s + ',' + col_v + ',' + col_e + ',' + QuotedStr(parent) + ',' + QuotedStr(StringReplace(form1.Label9.Caption, '\', '\\',[rfReplaceAll, rfIgnoreCase])) + ');');(form1.StringGrid1, form1.Image1);(form1.StringGrid2);('Нет совпадений');.mySQLDatabase1.Execute('INSERT INTO list VALUES(0,' + hash + ',' + p + ',' + s + ',' + col_v + ',' + col_e + ',' + QuotedStr('-') + ',' + QuotedStr(StringReplace(form1.Label9.Caption, '\', '\\',[rfReplaceAll, rfIgnoreCase])) + ');');;;.Free;.mySQLTable1.Refresh;.Button6.Enabled:=False;.mySQLQuery1.Active:=False;;TForm1.Connect1Click(Sender: TObject);.Button1.Click;;TForm1.Disconnect1Click(Sender: TObject);.Button5.Click;;TForm1.N3Click(Sender: TObject);;TForm1.Image3Click(Sender: TObject);.Button3.Click;;