ปัจจุบันเทคโนโลยีด้านอิเล็กทรอนิกส์เจริญขึ้นอย่างรวดเร็ว ผลก็คือ เราก็มีเทคโนโลยีที่ดี และราคาถูกลง เช่นกันด้าน soft ware ก็มีการพัฒนาไปมาก เช่นโปรแกรมด้าน image processing ที่มีความสามารถหลากหลาย ก็แถมติดมากับแผ่น driver กล้อง web camera เลยก็ยังมี อีกทั้ง smart phone สมัยนี้มาแรงจริงๆครับ เทคโนโลยีของเขาถือว่าก้าวล้ำนำสมัย แต่ถ้าเรานั่งใช้นั่งรอเขาทำของใหม่ๆมาให้เราใช้ก็สะดวกอีกแบบครับ แต่ถ้าเราพอจะมีความรู้อยู่บ้าง และความต้องการด้าน soft ware ที่เฉพาะเจาะจง เพื่อให้เข้ากับงานของเรา การพัฒนาขึ้นใช้เองก็เป็นอีกทางออกหนึ่งครับ คิดเสียว่าเหมือนเราเขาโรงเรียนตอนเด็กยังไงทุกคนก็เริ่มจาก หัดท่องหัดเขียน (ก ข, a b c) เหมือนๆ กันครับ ไม่เป็นไรของแพงย่อมต้องดีอยู่แล้ว แต่ของที่ทำขึ้นเองก็ต้องดีในแบบฉบับของเราและแน่นอนมันภูใจครับ แต่หากท่านใดต้องการความสะดวกรวดเร็ว และมีกำลังทรัพย์ผมถือว่าเป็นความได้เปรียบอย่างหนึ่งครับ
กลับมาที่น้องเขาฝากข้อความไว้ (ไม่รู้จะกลับมาดูอีกไหม) ก็ประจวบเหมาะที่ผมเคยซื้อเจ้า webcam (Oker, web camera 177) มาไว้ใช้งานเก็บข้อมูลบางอย่าง ไว้นานแล้วเหมือนกัน ตอนนั้นผมใช้ soft ware ทั่วไปที่มีแจกกันใน cyber space ผมก็คิดไปคิดมา ว่าจะเริ่มยังไง เพราะไม่เคยทำมาก่อน สุดท้ายก็ลองมั่ว กันสักพักแต่ก็โชคดีที่หา key word ได้ถูกเลยค้นได้ง่ายหน่อย ผมค้นสองทาง ทางแรกใน internet และทางที่สอง MATLAB Help เว็บไซต์หนึ่งที่ผมเข้าไปดูและ ขอขอบคุณไว้ตรงนี้ Video & Image Acquisition using MATLAB
ก่อนอื่นผมใช้คำสั่งพวกนี้ครับ เพื่อตรวจสอบที่เกี่ยวกับข้อมูลวิดีโอ
>> imaqhwinfo('winvideo')
ans =
AdaptorDllName: [1x81 char]
AdaptorDllVersion: '3.2 (R2008b)'
AdaptorName: 'winvideo'
DeviceIDs: {[1] [2] [3]}
DeviceInfo: [1x3 struct]
ปรากฏว่าพบ Devices สามตัวด้วยกัน ผมก็ตรวจดูทีละตัวว่าตัวไหนกำกับด้วย DeviceID อะไร
ในที่นี้ Oker 177 กำหนดเป็นตัวที่ 2 ก็ลองตรวจดูรายละเอียด ก็อย่างที่เห็นด้านล่างเลยครับ
>> dev2=imaqhwinfo('winvideo',2)
dev2 =
DefaultFormat: 'RGB24_640x480'
DeviceFileSupported: 0
DeviceName: 'USB Video Device'
DeviceID: 2
ObjectConstructor: 'videoinput('winvideo', 2)'
SupportedFormats: {1x18 cell}
จากนั้นผมก็คำสั่ง videoinput เพื่อเตรียม video ให้กับ object ของเราในที่นี้ให้ชื่อว่า vid ส่วน winvideo
นั้นเป็นชื่อ adapter ที่ใช้ติดต่อกับ webcam ส่วนเลข 2 ก็เป็น device ID จากนั้นใช้คำสั่ง preview เพื่อแสดง video
>> vid=videoinput('winvideo',2);
>> preview(vid);
จากนั้นก็ลองทำ GUI ขึ้นมาหน้าตาประมาณนี้ จุดประสงค์ของ GUI นี้คือ แสดง video ที่รับมาจาก webcam สามารถ capture เป็นรูปภาพได้พร้อมจัดเก็บ มีชุดประมวลผลด้านภาพ หรือ วิดีโอ (คงต้องเพิ่มเติมทีหลัง ตอนนี้ยังไม่มีปัญหาที่ชัดเจนว่าจะเอาไปใช้แก้ปัญหาอะไร)
ในเบื้องต้นยังไม่ได้พัฒนาอะไรเลย แค่ติดต่อ webcam แล้ว capture ภาพนิ่งเท่านั้น เวอร์ชันต่อไปคงทำส่วนของ processing ครับ
ในส่วนของคำสั่งที่จะปรากฏใน m-file มีรายละเอียดหลัก มีดังนี้
% --- Executes on button press in disconnect.
function disconnect_Callback(hObject, eventdata, handles)
% hObject handle to disconnect (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
closepreview
% --- Executes on button press in connect.
function connect_Callback(hObject, eventdata, handles)
% hObject handle to connect (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
axes(handles.axes1);
check1=get(handles.Camera1,'value');
check2=get(handles.Camera2,'value');
check3=get(handles.Camera3,'value');
if (check1==1)
obj=videoinput('winvideo',1);
elseif (check2==1)
obj=videoinput('winvideo',2);
else
obj=videoinput('winvideo',3);
end
vidRes = get(obj, 'VideoResolution'); % Resolution of device ex. 640x480
nBands = get(obj, 'NumberOfBands'); % number of channels ex. 3=RGB image
hImage = image( zeros(vidRes(2), vidRes(1), nBands) );
preview(obj, hImage);
handles.objVideo=obj;
guidata(hObject, handles);
% --- Executes on button press in capture.
function capture_Callback(hObject, eventdata, handles)
% hObject handle to capture (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
axes(handles.axes3);
im=getsnapshot(handles.objVideo);
handles.image=im;
imshow(handles.image);
%delete(handles.objVideo);% clear memory
guidata(hObject, handles);
% --- Executes on selection change in listbox1.
function listbox1_Callback(hObject, eventdata, handles)
% hObject handle to listbox1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
files = dir(fullfile(theFolder, '*.jpg'));
set(handles.listbox1, 'string', {files.name})
% Hints: contents = get(hObject,'String') returns listbox1 contents as cell array
% contents{get(hObject,'Value')} returns selected item from listbox1
% --- Executes during object creation, after setting all properties.
function listbox1_CreateFcn(hObject, eventdata, handles)
% hObject handle to listbox1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: listbox controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
% --- Executes on button press in save.
function save_Callback(hObject, eventdata, handles)
% hObject handle to save (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
%current_image=handles.image;
imsave
% --- Executes on button press in CloseWindow.
function CloseWindow_Callback(hObject, eventdata, handles)
% hObject handle to CloseWindow (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
close(ancestor(hObject,'figure'))
% --- Executes on button press in Camera1.
function Camera1_Callback(hObject, eventdata, handles)
% hObject handle to Camera1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hint: get(hObject,'Value') returns toggle state of Camera1
% --- Executes on button press in Camera2.
function Camera2_Callback(hObject, eventdata, handles)
% hObject handle to Camera2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hint: get(hObject,'Value') returns toggle state of Camera2
% --- Executes on button press in Camera3.
function Camera3_Callback(hObject, eventdata, handles)
% hObject handle to Camera3 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hint: get(hObject,'Value') returns toggle state of Camera3
% --- Executes on button press in processingUnit.
function processingUnit_Callback(hObject, eventdata, handles)
% hObject handle to processingUnit (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
process_check=get(handles.processingUnit,'value');
if (process_check==1)
setappdata(0, 'cap_image', handles.image);% ?????????????????? handles.dataShow ????? test_data
ImagePro;
end% open externalTable GUI
% Hint: get(hObject,'Value') returns toggle state of processingUnit
ขอบคุณมากๆค่ะ
ReplyDeleteผมโหลดเอามาลอง capture แต่ภาพที่ได้เป็นภาพสีออกชมพูแดงๆ ทำไมไม่เป็นเหมือนภาพตัวอย่างล่ะครับ
ReplyDeleteลองตรวจสอบ driver กล้องว่าตรงกันไหม (ถ้าไม่ตรงจะมีปัญหา)
Deleteหากได้ติดตั้ง driver แล้วให้ตรวจ DefaultFormat อีกทีว่าตรงกับ spec กล้องจริง
สนใจอยากสอบถามข้อมูลต้องการตรวจสอบการซิงค์กันของเว็ปแคมทั้ง3 ตัว พอดีมันมีปัญหาน่ะค่ะ ถ้าไม่เป็นการรลกวนช่วยติดต่อ boonyanuch.nan@gmail.com หน่อยนะคะ หรือทิ้งเมลล์ไว้ก็ได้ค่ะ ขอบคุณนะคะ
ReplyDeleteคิดว่าติดต่อทาง FB เร็วและง่ายกว่าครับ ที่ page GUI MATLAB เลยครับ
ReplyDeleteใช้ imaqhwinfo เพื่อหากล้องที่เชื่อมต่อ
ReplyDeleteแต่เจอแต่ dcam ไม่ขึ้น ชื่อ webcam เลยค่ะ
แต่ถ้าใช้คำสั่ง webcamlist จะขึ้น front camera กับ Logitech ค่ะ