23 สิงหาคม 2552

งานสัปดาห์วิทยาศาสตร์แห่งชาติ ที่เมือ...

งานสัปดาห์วิทยาศาสตร์แห่งชาติ ที่เมืองทองธานี
ผมไปประชาสัมพันธ์ การแข่งขันหุ่นยนต์ฮิวมานอยด์เตะฟุตบอลมานะครับ 
มีการรันหุ่น KM-4 โชว์ทุกๆชั่วโมง 
ก็รันกันไปซ่อมกันไปเลยครับ


ในงานนี้มีบูทพับกระดาษ ผมชอบที่สุดเลย ไม่อยากให้คนดูถูกการพับกระดาษ 
ว่าเป็นแค่ของเล่นธรรมดา ส่วนตัวผมเอง ชอบพับกระดาษ และได้ไอเดียในการเขียนโปรแกรมหลายครั้งมาจากการพับกระดาษ
ซึ่งมันไม่น่าจะเกี่ยวข้องกันเลย ผมคิดว่าการพับกระดาษเป็นอะไรที่น่าทึ่งมาก มันเป็นของ 2 มิติ ให้การเป็นของ 3มิติ ได้
มันมีการตอบสอง กับคนพับทุกมุมมองเลยทีเดียว
และนี่ก็เป็นพับกระดาษรูปเสือปีนักษัตร ของผมเอง มันทำให้เราต้องใช้จินตนาการในการดู
และก็ต้อง คิดให้ได้ว่า ส่วนไหนคือส่วนสำคัญของเสือ ที่จะต้องเน้นรายละเอียดในการพับส่วนนั้นเป็นพิเศษ

ใครสนใจเรื่องพับกระดาษเชิญที่ชมรมนักพับกระดาษไทยได้เลยครับ จะเห็นว่าเดี๋ยวนี้เค้าพับพิฆเนศได้แล้ว
งานนี้ผมก็ได้ทำเปเปอร์คลาฟ น้องซันชาย ของfibo มาด้วย


13 สิงหาคม 2552

สร้าง Python Project บน Eclipse ด้วย ...

สร้าง Python Project บน Eclipse ด้วย Pydev
  1. ต้องติดตั้ง Pydev ก่อน ทีนี่
  2. ไปที่ File> New > Project..
  3. เลือก Pydev > Pydev Project คลิก Next
  4. Project name: test คลิก Finish
  5. ด้านซ้าย คลิก test > src คลิกขวา New > Python Module

    Package : ให้เว้นว่างไว้
    Name : main
    Template : Module: Main
    คลิก Finish
  6. ในไฟล์ main.py เพิ่ม code encoding เพื่อให้ใช้ภาษาไทยได้ดังนี้
    #!/usr/local/bin/python
    # -*- coding: UTF8 -*-


    '''
    Created on 13 ส.ค. 2552

    @author: naymin_suksen
    '''

    if __name__ == '__main__':
        print "สวัสดี ชาวโลก"
        pass

  7. คลิก Run > Run

    เลือก Python Run
    คลิก OK
  8. จะได้ผลลัพธ์ ดังนี้



ใช้ Eclipse เขียน Python ด้วย Pydev

ใช้ Eclipse เขียน Python ด้วย Pydev
  1. ดาวน์โหลด Eclipse http://www.eclipse.org/downloads/
  2. แตก zip แล้วเรียก eclipse.exe
  3. ไปที่ Help > Install New Software...
  4. คลิก add
  5. Name : Pydev and Pydev Extensions
    Location: http://www.fabioz.com/pydev/updates

    คลิก ok
  6. คลิก ถูกหน้า PyDev ส่วนที่เหลืออีก 2 ตัวคือ ส่วนเสรืมจะลงหรือไม่ลงก็ได้ แต่ผมลงหมด

    คลิก Next
  7. คลิก Next ไปเรื่อยๆครับ ถ้ามีให้ I agree ให้ยอมรับแล้วคลิก Next ต่อ
  8. เมื่อเสร็จแล้วให้ Restart ตัว Eclipse ก่อน
  9. เปิด Eclipse อีกครั้งหนึ่ง
  10. ไปที่ Windows >Perferences หาในแทบเลือก Pydev> Interperter - Python

  11. คลิก New
    Interpreter Name : Python26
    Interpreter Executable : C:\Python26\python.exe

    คลิก ok
  12. คลิก ok อีก 2 ครั้ง เป็นอันเสร็จการติดตั้ง

ใช้ opencv ใน python ด้วย ctypes-open...

ใช้ opencv ใน python ด้วย ctypes-opencv 0.8.0
  1. ไปที่ http://python.org/
  2. เข้าไปที่เมนู LINKS ด้านซ้าย หรือ http://python.org/links/
  3. เข้าไปที่ Python Package Index หรือ http://pypi.python.org/pypi
  4. พิมพ์ opencv แล้วกด search

  5. เลือก Package ที่ Score สูงๆ ไปใช้ ผมใช้ ctypes-opencv 0.8.0
  6. คลิกตาม link ไปเรื่อยๆ จนถึงหน้า http://code.google.com/p/ctypes-opencv/
  7. ด้านขวาแถบเขียวเลือก ctypes-opencv-0.8.0.win32-py26.exe
  8. ได้ไฟล์มาแล้ว ติดตั้งตามปกติ
  9. ไฟล์ library จะถูก copy ไปไว้ที่ C:\Python26\Lib\site-packages โดยอัตโนมัติ
  10. เพื่อให้ใช้ กับ Sample ของ opencv ที่อยู่ใน C:\Program Files\OpenCV\samples\python ได้
    เราต้องสร้าง library หลอกๆอีกอันหนึ่งให้ชื่อเหมือน opencv
  11. คัดลอก โฟลเดอร์ ctypes_opencv ที่ C:\Python26\Lib\site-packages
    วางที่เดิม C:\Python26\Lib\site-packages แล้วเปลี่ยนชื่อ เป็น opencv

    สุดท้ายจะได้ 2 โฟลเดอร์ คือ ctypes_opencv ,opencv อยู่ใน C:\Python26\Lib\site-packages

  12. ทดลองรัน sample ที่มาจาก opencv ที่อยู่ใน C:\Program Files\OpenCV\samples\python
    ในที่นี้ใช้ facedetect.py


ฟีโบ้เพื่อชุมชน ต.ชุมแสง

ฟีโบ้เพื่อชุมชน ต.ชุมแสง จ.ระยอง

ช่วงเช้าสอบถามข้อมูลโดยตรงจากนายกเทศมนตรี
ได้ข้อมูลมาว่า ชาวบ้านอาชีพ ปลูกยางพารา เลี้ยงปลาในกระชัง จับกุ้งกรามกรามในอ่างเก็บน้ำ

ขันตอนการทำยางพาราคือ 3 ทุ่ม กรีดยาง แล้วเก็บน้ำยางตอนเช้ามืด
นำน้ำยางที่ได้ผสมกรด แล้วรีดออกมาเป็นแผ่น
ปัญหาที่เกี่ยวกับยางพาราคือ
  1. ราคาตกต่ำ
  2. โจรขโมยน้ำยาง
  3. น่ำหนักยางหายไประหว่างขนส่ง
  4. หน้าฝนตากยางไม่ได้ ทำให้ได้ราคาไม่ดี

หลังจากนั้นไปทานข้าว รสชาติออกแนวรสจัดมากๆเลย


มาสำรวจต่อที่ชุมชนพอเพียง

ที่นี่เข้ามาอยู่ฟรีบ้างหนึ่งหลังมี 1 ห้องนอน
ทีนี้เค้าไม่สนใจจะใช้เทคโนโลยีเพิ่มผลผลิตเลย
น่าเสียดายจริงๆ


การประมง หล้งจากสร้างเขื่อนกุ้งกลับไปวางไข่ที่ปากอ่าวไทยไม่ได้
กรมประมงเลยใช้วิธีซื้อกุ้งที่ไข่จากชาวบ้านแล้วเอาไปเพาะเลี้ยงที่ปากอ่าว
แล้วนำตัวอ่อนกลับมาปล่อยคืนในอ่างเก็บน้ำปะแส

การเลี้ยงปลาทับทิมในกระชัง ตื่นเต้นมาตอนนั่งเรือไปดูที่กระชัง
เค้าจะต้องมาให้อาหารปลา วันละ 3-4 ครั้งครั้งละ 1 ชั่วโมง ประมาณ 12 กระชัง
1 กระชังกว้าง 5x5 เมตร มีปลา 1000 ตัว เลี้ยง 4 เดือน งบประมาณลงทุนประมาณ 2 แสนบาท
ในหารให้อาหารปลาบางครั้งต้องคลุกยาให้ด้วยต้องคอยสังเกตอาการเอาเอง
บางครั้งน้ำขั้นทำให้หน้าบริเวณริมน้ำเน่า ออกซิเจนต่ำ ต้องเปิดออกซิเจนให้ปลาด้วย

มีความต้องการเครื่องให้อาหารปลาอัตโนมัติตามเงื่อนไขนี้
  1. ให้อาหารปลาวันละ 3-4 ครั้ง
  2. ให้ในปริมาณที่ปลากินอิ่มสังเกตจากปลาจมลงไปไม่ขึ้นมากินอาหาร
อาหารปลามี 2 ชนิด คือชนิดจมกับชนิดลอย ปลาชอบกินชนิดลอย แต่ราคาแพงกว่าชนิดจม เกือบเท่าตัว
ถ้าทำให้อาหารชนิดจมลอยได้ก็จะช่วยต้นทุนการผลิตได้มาก


robot conference in Thailand

robot conference in Thailand
http://riit2009.org/

Connect Iphone with Ardunio

Connect Iphone with Ardunio


ทำงานร่วมกับหมอ ในการเขียนโปรแกรม สังงาน Arduino จาก Iphone ประกอบด้วย 3 ส่วนคือ
1. Iphon ใช้ Emulater บนเครื่องแมค ของหมอ
2. ใช้ Notebook ของผมเอง ทำหน้าที่เป็น Server แล้วเชื่อมต่อกับ iPhone ผ่าน Wireless Lan
3. ใช้ Arduino เชื่อมต่อกับคอมของผมผ่าน Serial Port ต่อไปอาจประยุกต์ใช้ต่อผ่าน Bluetooth

27 กรกฎาคม 2552

ไปถ่ายรูปรับปริญญาที่ ม.เกษตร

ไปถ่ายรูปรับปริญญาที่ ม.เกษตร
เจอกระแต เอม แนน 
ไปถ่ายรูปกับว่าที่บัณทิต บราวน์
แล้วปิดท้ายด้วยบังเอิญไปเจอ แฝดปวีณา นัยนา ไม่ได้เจอนานแยกไม่ออกเลยว่าใครเป็นใคร เสื้อม่วงนัยนา
เสื้อเทาปวีณา


23 กรกฎาคม 2552

Example 2 - Analyzing Images

Example 2 - Analyzing Images
เปิดรูป เมล็ดข้าว
I = imread('rice.png');
imshow(I)

สร้าง background
    strel แบบ disk จะได้ เมตริกซ์ที่บริเวณมุม เป็น ศูนย์ ตรงกลางๆ เป็น 1 คล้ายวงกลม
อยู่กลางเมตริกซ์
    imopen เป็น Erosion ตามด้วย Dilation มันจะตรงข้ามกับ closing อ้างอิง
background = imopen(I,strel('disk',15));

ลองวาดกราฟแบบ พื้นผิว ดูความขาวดำของสีพื้น
figure, surf(double(background(1:8:end,1:8:end))),zlim([0 255]);
set(gca,'ydir','reverse');

ทำให้เมล็ดข้าวกับ background สีมันแตกต่างกันมากขึ้น
I2 = I - background;
imshow(I2)
แต่มันจะทำให้ภาพเมล็ดข้าวมืดลง


เพิ่ม contrast ใช้ imadjust(I) = imadjust(I,stretchlim(I)) คือมันจะแผ่ขยายสีให้เต็มช่วงเลย
อ้างอิง
I3 = imadjust(I2);
imshow(I3);


ทำ threshold ให้เป็นภาพขาวกับดำเท่านั้น
level = graythresh(I3);
bw = im2bw(I3,level);
level หาค่าที่เหมาะสมที่จะแบ่งระหว่างสีขาวกับสีดำ ด้วย graythresh(I)
im2bw แปลง grayscale เป็น binary

จะเห็นว่ามีบางจุดที่เป็น noise อยู่ เป็นจุดขาวๆเล็กๆ ทำopenเพื่อให้หายไป
bw = bwareaopen(bw, 50);
imshow(bw)


จากใน Tutorial ให้เราใช้คำสั่ง
cc = bwconncomp(bw, 4);
??? Undefined function or method 'bwconncomp' for input arguments of type 'double'.
ซึงแปลว่า มันไม่มี M File ของ bwcommcompลองหาดูได้ใน C:\Program Files\MATLAB\R2008a\toolbox
ลองลง Image Processing Toolbox™ ดูใหม่ แต่เมื่อติดตั้งใหม่ version ล่าสุด ก็ไม่มี function bwconncomp ให้อยู่ดี
ทีนี้ลองหา function อื่นมาทดแทนที่ใช้หา CC = bwconncomp(BW) returns the connected
components CC found in BW. The
binary image BW can have any dimension. CC is
a structure with four fields.
[CC,NUM] = bwlabel(BW,4)
>> num

num =

    95
มันจะนับออกมาได้ 95 Object

Update 23 ส.ค. 2552
เพื่อให้หมดปัญหา ผมได้หา Matlab 2009a มาจาก ป้อสาธิต ต้องขอขอบคุณเลยนะครับ
ผมก็กลับมาใช้คำสั่งดังเดิมคือ
cc = bwconncomp(bw, 4);
grain = false(size(bw));
ก็จะได้ grainขนาด เท่ากับ bw ดีดำทั้งรูปมา
ต่อไปเราจะ label เมล็ดข้าวด้วยสีต่างๆ
labeled = labelmatrix(cc);
RGB_label = label2rgb(labeled,'jet', 'k', 'shuffle');
figure, imshow(RGB_label)
ซึ่งคำสั่ง label2rgb(L, map, zerocolor,
order)
ปรับแต่ง map ดังนี้

ใส่ zero color ดังนี้
ส่วน order มีแค่ 'noshuffle' กับ 'shuffle' เท่านั้น
ได้รูปที่ lable ออกมาดังนี้


หา พื้นที่ของแต่ละเมล็ด
ด้วยการหา property ของ พื้นที่
graindata = regionprops(cc,'basic');
สามารถเปลี่ยน 'basic' เป็น อย่างอื่นได้อีก


หาเมล็ดข้าวที่ใหญ่ที่สุด
grain_areas = [graindata.Area];
[max_area,idx] = max(grain_areas)
grain(cc.PixelIdxList{idx}) = true;
imshow(grain);

ค่า idx คือ สมาชิกที่ให้ค่าmax เช่น graindata(idx).Area จะได้ค่าคือ max_area เช่นเดียวกัน

จะเห็นได้ค่าไม่ได้เป็นเมล็ดข้าวเมล็ดข้าวที่ใหญ่ที่สุดจริงๆ เพียงแต่มันเป็น 2 เมล็ดติดกันเท่านั้นเอง
ซึ่งอาจต้องกลับไปปรับปรุงในช่วงที่ทำ opening กับ closeing
ซึ่งเราสามารถplot ความถี่ของขนาดของเมล็ดข้าวออกมาดูได้
nbins =20;
figure, hist(grain_areas,nbins)
title('Histogram of Rice Grain Area');
เราก็จะเห็น ค่าถี่ที่ผิดปกติได้

ซึ่งเมล็ดข้าวที่เต็มเมล็ด จะมีพื้นที่ประมาณ 200
ส่วนที่เล็กกว่า นั้นเป็นเมล็ดข้าวที่หัก
และส่วนที่ใหญ่กว่า ก็คือ เมล็ดข้าวที่อยู่ชิดกันเกินไป จนพื้นที่ของทั้งสองเมล็ดรวมกันเป็นอันเดียวนั่นเอง











RGB1 = imread('football.jpg');

Example 2 - Analyzing Images
เปิดรูป เมล็ดข้าว
I = imread('rice.png');
imshow(I)

สร้าง background
    strel แบบ disk จะได้ เมตริกซ์ที่บริเวณมุม เป็น ศูนย์ ตรงกลางๆ เป็น 1 คล้ายวงกลม
อยู่กลางเมตริกซ์
    imopen เป็น Erosion ตามด้วย Dilation มันจะตรงข้ามกับ closing อ้างอิง
background = imopen(I,strel('disk',15));

ลองวาดกราฟแบบ พื้นผิว ดูความขาวดำของสีพื้น
figure, surf(double(background(1:8:end,1:8:end))),zlim([0 255]);
set(gca,'ydir','reverse');

ทำให้เมล็ดข้าวกับ background สีมันแตกต่างกันมากขึ้น
I2 = I - background;
imshow(I2)
แต่มันจะทำให้ภาพเมล็ดข้าวมืดลง


เพิ่ม contrast ใช้ imadjust(I) = imadjust(I,stretchlim(I)) คือมันจะแผ่ขยายสีให้เต็มช่วงเลย
อ้างอิง
I3 = imadjust(I2);
imshow(I3);


ทำ threshold ให้เป็นภาพขาวกับดำเท่านั้น
level = graythresh(I3);
bw = im2bw(I3,level);
level หาค่าที่เหมาะสมที่จะแบ่งระหว่างสีขาวกับสีดำ ด้วย graythresh(I)
im2bw แปลง grayscale เป็น binary

จะเห็นว่ามีบางจุดที่เป็น noise อยู่ เป็นจุดขาวๆเล็กๆ ทำopenเพื่อให้หายไป
bw = bwareaopen(bw, 50);
imshow(bw)