google-sheet2Html

/*! * * Google Sheets To HTML v0.9a * * To use, simply replace the "tq?key=" value in the * URL below with your own unique Google document ID * * The Google document's sharing must be set to public * */ google.load('visualization', '1', { packages: ['table'] }); var visualization; function drawVisualization() { var query = new google.visualization.Query('https://spreadsheets.google.com/tq?key=https://docs.google.com/spreadsheets/d/1-vUEZ9tae5C_OXzSi0dQPWwUrO3H5S-gImB5afFgqDg/edit?usp=sharing'); query.setQuery('SELECT A, B, C, D label A "Duration", B "Song", C "Requested By", D "URL"'); query.send(handleQueryResponse); } function handleQueryResponse(response) { if (response.isError()) { alert('There was a problem with your query: ' + response.getMessage() + ' ' + response.getDetailedMessage()); return; } var data = response.getDataTable(); visualization = new google.visualization.Table(document.getElementById('table')); visualization.draw(data, { legend: 'bottom' }); } google.setOnLoadCallback(drawVisualization);
Showing posts with label สอน Linux. Show all posts
Showing posts with label สอน Linux. Show all posts

Sunday, September 8, 2019

Text to speech เปลี่ยนอักษรเป็นเสียง

Text to speech ด้วย Ruby

Google TTS เป็นการแปลงอักษรเป็นเสียง ปัจจุบัน(2562) สนับสนุนภาษาไทยแล้ว
ในบทความนี้ จะเขียน ด้วยภาษา  Ruby (สำหรับผู้สนใจภาษา Python ไปอ่านในโพสต์เก่าครับ)
ใครยังไม่ได้ติดตั้ง Ruby ให้ติดตั้งก่อน นะครับ
และเนื่องจาก Google TTS ต้องส่งข้อมูลทาง อินเตอร์เน็ต ในขณะใช้งาน ต้องมีการเชื่อมต่ออินเตอร์เน็ต ด้วย

เริ่มต้น ด้วยการ ติดตั้ง gem install tts ด้วยคำสั่ง


$ sudo gem install tts

แล้วทำการติดตั้ง mpg123 ด้วยคำสั่ง

$ sudo apt install mpg123

ทำการทดสอบ ด้วย irb 
พิมพ์ คำสัง require 'tts'
จะได้ต่า true แสดงว่าติดตั้งเสร็จแล้ว
 
ออกจาก irb โดยกด ctrl+C   และพิมพ์ exit
 
ต่อไปสร้าง สคริป ดังนภาพ
require 'tts' เป็นการเรียกใช้ Google TTS
ตามด้วยคำสั่ง clear จอภาพ
กำหนดให้ตัวแปร a รับข้อมูลจาก แป้นพิมพ์
คำสัง a.play("th", 1)  เป็นการส่งข้อมูลไปยัง   Google TTS แล้วจะทำการส่งไฟล์เสียงนามสกุล mp3 กลับมา ซึ่งเมื่อได้รับข้อมูลแล้ว ให้เล่นด้วยคำสั่ง play ซึ่งเป็นตำสั่งที่เราได้ติดตั้งโปรแกรม mpg123 ค่าพารามิเตอร์ 1 คือให้เล่นเสียง ซ้ำ กี่ครั้ง


ใครต้องการให้อ่าน จากแฟ้มข้อมูล ให้ใช้ สคริปนี้
 

 
อ่านบทความละเอียดจาก  
https://www.rubydoc.info/gems/tts/0.7.1

Friday, September 6, 2019

วิธี ติดตั้ง GUI Tk บน Ruby


วิธี ติดตั้ง GUI tk บน Ruby


 

ผมใช้ Linux ต้องการให้ Ruby มี GUI ซึ่งมีหลาย ตัว แต่เลือก ใช้ Tk ต้องทำการติดตั้งเพิ่มเติม

เริ่มจากติดตัง libraries ที่ต้องการก่อน
$ sudo apt-get install tcl8.5-dev tk8.5-dev

เมื่อเริิ่มติดตัง จะเกิด ข้อผิดพลาด 
 
$ sudo gem install tk
Fetching: tk-0.2.0.gem (100%)
Building native extensions. This could take a while...
ERROR: Error installing tk:
ERROR: Failed to build gem native extension.

สาเหตุจากต้องทำการ config parameters ให้ทำการแก้ไขด้วยคำสั่ง
$ sudo ln -s /usr/lib/x86_64-linux-gnu/tcl8.5/tclConfig.sh /usr/lib/tclConfig.sh

$ sudo ln -s /usr/lib/x86_64-linux-gnu/tk8.5/tkConfig.sh /usr/lib/tkConfig.sh

$ sudo ln -s /usr/lib/x86_64-linux-gnu/libtcl8.5.so.0 /usr/lib/libtcl8.5.so.0

$ sudo ln -s /usr/lib/x86_64-linux-gnu/libtk8.5.so.0 /usr/lib/libtk8.5.so.0

แล้่วทำการติดตั้งอีกครั้ง ด้วยคำสั่ง

$ sudo gem install tk

Building native extensions. This could take a while...
Successfully installed tk-0.2.0
Parsing documentation for tk-0.2.0
Installing ri documentation for tk-0.2.0
Done installing documentation for tk after 9 seconds
1 gem installed

ลอง ทำการ ทดสอบ ใน irb

$ irb
irb(main):001:0> require 'tk'
=> true

ผลที่ได้ true แสดงว่า ติดตั้งเสร็จแล้ว 


ลองสร้าง GUI Tk

ชื่อไฟล์ TkGooTts.rb
ดังนี้



จากนั้นทำการแก้ค่า permission เพื่อให้ทำงาน
$ sudo chmod 777 TkGooTts.rb

สังให้ทำงาน ด้วย
$ ./TkGooTts.rb

จะได้ ผลดังนี้



บทความจาก
The bindings for the standard Ruby GUI toolkit, Tk, need some trickery in order to be installed on Ubuntu


Wednesday, November 22, 2017

Install Servo Controller Pololu บน Linux



  ติดตั้ง Pololu Maestro Control Center บน Linux






สำหรับผู้ใช้ Linux ให้ไป download และติดตั้งที่  

https://www.pololu.com/product/1350/resources

ในขณะเขียนบทความ (20 พย 2560) ชื่อไฟล์ที download ได้คือ maestro-linux-150116.tar.gz

เมื่อได้ไฟล์มาแล้ว ให้แตกไฟล์ออก ผู้เขียนแตกไฟล์ ที่ Downloads ได้แฟ้มชื่อ maestro-linux


ในfile README.txt  แจ้งว่าการติดตั้งในระบบ ต้องมี่ package ดังนี้

libusb-1.0-0-dev mono-runtime libmono-winforms2.0-cil 


เมื่อทำการติดตั้งโดยใช้คำสั่ง ตามเอกสารใน README.txt 

 $ sudo apt-get install libusb-1.0-0-dev mono-runtime libmono-winforms2.0-cil

จะเกิด error ดังในภาพ


 


คือไม่สามารถหา package ชื่อ libmono-winforms2.0-cil ให้ทำการแก้ไขโดยติดตั้ง mono-reference-assemblies-2.0 mono-devel ทดแทน
ให้ทำการแก้ไขโดยติดตั้งด้วยคำสั่ง

$ sudo apt-get install libusb-1.0-0-dev mono-runtime mono-reference-assemblies-2.0 mono-devel

  
ก็จะทำการติดตั้งได้ ขั้นต่อไป ในTerminal ให้ใช้คำสั่ง cd ไปยังตำแหน่งที่แตกไฟล์ในตัวอย่างแตกไฟล์ที่ Downloads ให้พิมพ์คำสั่ง 

$ cd Downloads/maestro-linux 

 
จะพบไฟล์ชื่อ 99-pololu.rules เพื่อใช้ในการแก้ไขค่า permission ให้กับ users ต้องทำการ copy ไฟล์ 99-pololu.rules ไปยังตำแหน่ง     /etc/udev/rules.d/
ด้วยคำสั่ง

$ sudo cp 99-pololu.rules /etc/udev/rules.d
 

ถ้าหากได้ทำการต่อบอร์ด Pololu Servo Controller ไว้แล้วต้องทำการถอดออกก่อน ทำการเรียกโปรแกรมด้วย

$ ./MaestroControlCenter

ให้สังเกตุ มีเครื่องหมาย จุด หน้า เครื่องหมาย /  ก็จะเปิดโปรแกรม Pololu Maestro Control Center ได้












Tuesday, February 14, 2017

กู้ไฟล์ USB Drive ที่โดน Format

กู้ไฟล์ บน SD card หรือ USB drive


 วิธีกู้ไฟล์ข้อมูลที่ถูกลบ หรือ format แล้ว มีหลายโปรแกรม แต่ในที่จะใช้โปรแกรมใน Linux ที่ชื่อ photorec   ถ้ายังไม่ได้ติดตั้งให้ใช้ คำสั่ง ติดตั้งดังนี้

 sudo apt-get install testdisk


เมื่อทำการติดตั้งโปรแกรมเสร็จแล้ว ให้เริ่มจาก การหาชื่อของ usb drive ด้วยการกู้ข้อมูล เปิด เทอร์มินอล แล้วพิมพ์คำสั่ง

 lsblk



 จากในภาพ จะทำการกู้ไฟล์ ในตำแหน่ง sdb1
การเรียกใช้โปรแกรม ให้พิมพ์คำสั่ง

sudo photorec /dev/sdb1



เลือก ไดร์ฟ ที่ต้องการจะกู้ข้อมูล โดยใช้ Arrow Key จากนั้นเลือก [Proceed]

หากต้องการกู้ข้อมูล จาก ไดรฟ์ ที่มี หลาย พาร์ติชั่นให้ทำการเลือกตำแหน่งที่ต้องการ ในตัวอย่างเลือกกู้ข้อมูลใน FAT 32 

ให้กด s เพื่อลบรายการทั้งหมด จากนั้นใช้ Arrow Key เลื่อนไปตำแหน่งชนิดไฟล์ที่ต้องการ กด space bar เพื่อทำการเลือก เมื่อเสร็จให้กด b เพื่อบันทึก ในตัวอย่างต้องการกู้รูปภาพ เลือก ชนิด ไฟล์ jpg (หากต้องการ ไฟล์ชนิดอื่นให้ ทำการเลือกเพิ่มเติม) 

เมื่อทำการบันทึกแล้ว จะปรากฎดังภาพ

ต่อไป กด enter เพื่อย้อนกลับไป เมนูก่อนหน้า


เลือก [Search] จะให้เลือกตำแหน่งที่ต้องการบันทึกไฟล์ ที่กู้มาได้ ว่าจะบันทึกไว้ที่ไหน


เลือกตำแหน่งที่ต้องการ ให้ ตรวจสอบ เลือก [ Free] หรือ [ Whole ] ตามที่ต้องการ              
ในตัวอย่างเลือก [ Free ] FAT 32

กำหนดตำแหน่ง ที่จะบันทึก ไฟล์ ที่กู้มาได้ 
 
เมื่อกำหนดตำแหน่งที่ต้องการแล้ว กด C
โปรแกรมจะทำการกู้ไฟล์ ตามที่ต้องการ

  Cr. http://www.tecmint.com/photorec-recover-deleted-lost-files-in-linux/

Thursday, February 2, 2017

ซิมเพล็กซ์ รีพีทเตอร์ simplex repeater

โปรแกรม simplex repeater ทำเองก็ได้

บทความนี้ แสดงวิธีการ สร้างสถานนีทวนสัญญาณ เพื่อศึกษา การเขียนโปรแกรมเท่านั้น โปรดขอคำแนะนำกับ ศูนย์ควบคุมข่าย ประจำจังหวัด ก่อน ทดสอบ ครับ

โปรแกรม ซิเพล็ก รีพีทเตอร์ ในบทความนี้ใช้ ภาษาไพทอน ร่วมกัน sound meter  ถ้าอ่านแล้วไม่เข้าใจ ขอให้ย้อน ไปดู โพสท์ เก่าๆ ก่อน  โปรแกรมนี้ จะเป็นการเรียกใช้ สคริป ให้ทำงานเมื่อมีระดับเสียงดังในระดับที่กำหนด โดยจะทำการ บันทึกเสียง 10 วินาที จากนั้น จะส่ง สัญญาณ จาก Pyserial ควบคุม ปุ่ม PTT ของวิทยุสื่อสาร ออกอากาศ ด้วยเสียงที่บันทึกไว้โดย สคริป ที่ควบคุม ชื่อ repeater.sh มีรายละเอียดังในภาพ


 เมื่อ soundMeter ได้รับสัญญาณ เสียงจาก ไมโครโฟน ดังกว่าระดับที่ตั้งไว้ จะทำการบันทึกเสียงในไฟล์ชื่อ simplex.wav 
โดยทำการบันทึกเสียง แชนแนลเดียว ด้วย คำสั่ง rec -c 1 โดยกำหนดความยาวเป็นเวลา 10 วินาที่ ด้วย พารามิเตอร์ trim 0 10
คำสั่ง sleep 0.5 ให้ หยุด 0.5 วินาที เพื่อ ให้ pyserial ทำงาน แล้วจึง ส่งเสียงออกมาด้วย คำสั่ง play simplex.wav
 
ในการใช้งาน window  กับ linux การเรียกใช้ Pyserial ต่างกันเล็กน้อย ไปดูโพสท์ เก่าๆ แล้วแก้ไข การควบคุมที่ บรรทัด #insert PTT on กับ #insert PTT off

ดูวีดีโอตัวอย่างใช้งาน https://youtu.be/z5jsPE5CeDg





ในส่วน GUI ด้วย Tkinter Python 2 มีรายละเอียดดังนี้
#!/usr/bin/python
# coding: utf-8

#program radio+computer  by HS1ZFK
#last modify 2/02/2560 ConchRepeater#  version 2.0 Sox

import os
from Tkinter import *





def SetSerial():
    print "set usb serial converter"



def RepeaterOn():
    #repeater Start
    print "start repeater"
    #print ( tiggerValue.get())
    tig = str(tiggerValue.get())
    command = "soundmeter --trigger +" + tig +" 1 --action exec-stop --exec repeater.sh"
    print command
    os.system(command)

def About():
    Message(Mwin, text="Simplex Repeater by HSZFK"
            "set Mic noise Levea ""and time then click start", bg="royalblue", fg="ivory",relief=GROOVE).pack(padx=10, pady=10)

Mwin = Tk()  #Main Window

#set Menu bar
menubar = Menu(Mwin)


#create pulldown menu
ModeMenu = Menu(menubar,tearoff=0)
ModeMenu.add_command(label="Exit ", command=Mwin.quit)
menubar.add_command(label="Set up serial port", command=SetSerial)

menubar.add_command(label="Quit!", command=Mwin.quit)
menubar.add_command(label="About", command=About)


#display menu
Mwin.config(menu=menubar, bg="light cyan")

Mwin.geometry("450x350+300+300")        #set size and position of window
Mwin.title('Simplex_Sox v2.0 by HS1ZFK')




tiggerValue = Scale(Mwin, from_=300, to=500, length=600,label="trigger",bg="light cyan", troughcolor="blue", tickinterval=25, orient=HORIZONTAL)
tiggerValue.set(370)
tiggerValue.pack()

# set button
Btn1 = Button(Mwin,text=" Start Repeater ", bg="pale green",command=RepeaterOn)
Btn1.pack()

Mwin.mainloop()     #start the event loop


Thursday, January 26, 2017

โปรแกรม อ่าน ประกาศข่าว ชมรม ออโตเมติก

ประกาศข่าว ชมรม ด้วยคอมพิวเตอร์


   เนื่องด้วย พรบ. คอมพิวเตอร์ฉบับใหม่ ที่ประกาศใช้(25 มค.2560) มีบทกำหนดโทษผู้เผยแพร่ ซอร์ดโค้ด ที่มีผู้อื่นนำไปใช้ในทางผิดกฎหมาย จึงขอประกาศไว้ในที่นี้ว่า ผู้เขียนมีเจตนา สอนการเขียนโปรแกรมเพื่อการศึกษา เท่านั้น

   ในบทความนี้ เป็นการเขียน Python script สำหรับ เรียก CQ ในการแข่งขัน CQ contest หรือ ไปใช้ในการประกาศข่าวสมาคม โดยตั้งเวลาได้ โดยใช้ กราฟฟิก GUI ของ Tkinter

ก่อนทำการเรียกใช้ โปรแกรม
สิ่งที่ต้องเตรียมคือ ไฟล์เสียงนามสกุล wav  ซึ่งเป็นไฟล์ เสียงที่ บันทึกไว้ล่วงหน้า รูปร่างหน้าตาของ โปรแกรม มีดังนี้





แถบ slide bar เพื่อเลือกการตั้งเวลา ให้รอกี่นาที จึงอ่านประกาศ ซึ่งตั้งได้ 30 นาที เมื่อทำการตั้งเวลาแล้ว ให้กดปุ่ม Start
เมื่อครบเวลาที่กำหนด จะ เล่น ไฟล์เสียง ออกทางวิทยุสื่อสาร ดังภาพ


 ภาพด้านล่าง เป็น สคริป




ในการใช้งานจริง ให้แก้ไข ที่ บรรทัด def PlayAudio โดยทำการแทรกโค้ด สังเปิดปิด สวิท ptt ของวิทยุสื่อสาร

และ ให้แก้ไข การนับเวลา ที่ start_timer ซึ่งได้แก้ไว้ให้ เร็วกว่าจริง เพื่อ บันทึกวีดีโอ
 https://youtu.be/yyIs20I4qHo


Monday, January 23, 2017

หาตำแหน่ง QRM ตอนวิธีใช้ SoundMeter

โพสท์ที่ผ่านมาได้ ติดตั้ง โปรแกรมเสร็จแล้ว หากยังไม่ได้อ่านเรื่องตามหา QRM ด้วยการจับเวลา อาจจะดูไม่เข้าใจ ขอให้ย้อนไปดู โพสท์ เก่าก่อน ครับ

หลังจาก เราหาระดับความดังเฉลี่ยของเสียงรบกวนในห้องได้แล้ว เมื่อได้ยินเสียงระดับ RMS ดังกว่าที่กำหนด จะให้สคิปทำงาน ในวีดีโอนี้ จะให้ สคริป พิมพ์ ค่าเวลา ออกมาทางจอภาพ  ด้วยสคริปตั้งชื่อว่าpt.sh

 การใช้งาน soundmeter ด้วยคำสั่ง

$ soundmeter --trigger +350 1 --action exec-stop --exec pt.sh

เป็นคำสั่ง --trigger +350 เป็นการตั้งค่าให้ สคริปทำงานเมื่อ มีค่า RMS ของเสียงเกินกว่า 350

หมายเลข 1 หมายถึงให้ทำตามคำสั่ง 1 ครั้ง
คำสั่ง --action exec-stop หมายถึงให้ทำงานตามสคริป จากนั้นให้หยุดทำงาน 
คำสั่ง --exec pt.sh หมายถึงให้ทำงานตามสคริปชื่อ pt.sh

 ลองดูวีดีโอ คลิป https://www.youtube.com/watch?v=31R_6wcJiPI
 

Friday, January 20, 2017

หาตำแหน่ง QRM

หาตำแหน่ง QRM ด้วย การจับเวลา

เครื่องรับ GPS มีหลักการคำนวนพิกัด โดยคำนวณ จาก ความแตกต่างของเวลาที่สัญญาณที่ส่งจากดาวเทียมแต่ละดวงส่งถึงเครื่องรับ ถ้าเราใช้หลักการเดียวกันนี้ในการหาตำแหน่ง QRM เช่น สมมุติ สถานนีควบคุมข่าย HS1AB และ สถานนี HS1AM ซึ่งทั้ง สองสถานนี เราทราบ พิกัด GPS ต้องการตรวจหาตำแหน่ง QRM โดยการจับเวลา เมื่อได้รับสัญญาณ เสียงจาก ลำโพง (เสียงของ QRM) เอาเวลาที่แตกต่างกัน มาทำการคำนวณ ก็สามารถหาตำแหน่ง QRM ได้เช่นกัน
คลื่น เดินทางได้ 299,792,458เมตร ต่อ วินาที
นั่นคือ ใน 1 นาโน วินาที จะเดินทางได้ 29.9792458 cm

ในการตรวจจับ หาตำแหน่ง QRM ต้อง มีการติดตั้ง โปรแกรมที่ตรวจสอบ เสียงจาก วิทยุสื่อสาร ที่ทำการตั้งโทน สเควร์ เท่ากัน, สายอากาศ ที่มีกำลังขยาย ในระดับเดียวกัน อย่างน้อย 3 สถานนี แล้วนำ ค่าเวลามาคำนวณ


ในบทความนี้ จะใช้ โปรแกรม  Soundmeter 0.1.3 Python Package

ซึ่งเป็น  command line tools สำหรับตรวจวัดระดับเสียงแล้วเมื่อได้ยินเสียงตามระดับความดังที่กำหนด ก็สั่งให้ ทำตามคำสั่งสคริป

ในการใช้งาน ตัวอย่าง เช่น เมื่อได้ยินเสียงทาง ไมโครโฟน
ให้ บันทึกเสียง
หรือ ให้พิมพ์ เวลา เพื่อใช้ในการคำนวนหา QRM
หรือ ให้วิเคราะห์ เสียง  sound recognizer
หรือ เข้ารหัสเสียง เป็น GSM , FSK, codec2 ก่อน ส่งออกอากาศ

วิธีติดตั้ง Dependencies System Packages ก่อน ด้วย คำสั่ง

$ sudo apt-get install portaudio19-dev python-dev alsa-utils





จากนั้นติดตั้ง PyPi packages  ดังนี้
argparse
pyaudio
pydub
python-daemon

 ด้วยการพิมพ์ คำสั่ง

$ sudo -H pip install soundmeter --allow-all-external --allow-unverified pyaudio


หลังจากติดตั้งเสร็จ ให้ทำการ reboot เครื่อง และทดสอบผลการติดตั้งด้วย คำสั่ง
$ soundmeter

จะปรากฎดังในภาพ แสดงว่า ติดตั้ง สมบูรณ์ แล้ว

ก่อนที่จะใช้งาน ต้องทำการหา ค่าเฉลี่ย เสียง รบกวน ในห้องก่อน ในวีดีโอคลิป

 แสดง การตรวจจับ 5 วินาที่ ด้วยคำสั่ง
 https://www.youtube.com/watch?v=7dTLNtQWQTY


$ soundmeter --collect --seconds 5











เมื่อต้องการ เรียกใช้งาน เมื่อมี ระดับ เสียง RMS มากกว่า 317 แล้วให้ สคริป ทำงาน 1 ครั้ง แล้วหยุดทำงาน ตัวอย่างเช่น ต้องการให้ บันทึกเสียงสนทนา เราต้องเตรียม สคริปไว้ก่อน ในตัวอย่างใช้ชื่อว่า record.sh
 ให้พิมพ์ คำสั่ง

$ soundmeter --trigger +317 1 --action exec-stop --exec record.sh

ส่วนรายละเอียด คำสั่งอื่นๆ ลองไป อ่านดูใน
https://pypi.python.org/pypi/soundmeter



Tuesday, November 15, 2016

Config OpenCv สำหรับ eclipse

เกิดอาการเบื่อการ QSO เลย ลองมาศึกษา วิธีใช้งาน openCv ผู้เขียนใช้ OS Linux ในที่นี้จะทำการการตั้งค่าเพื่อเริ่มเขียนโปรแกรม ด้วย eclipse  (การติดตั้ง eclipse และ OpenCv ในระบบ Windows, Mac, Linux จะแตกต่างกัน ให้ดูรายละเอียดการติดตั้ง ในเวปไซด์ ของ eclipse ที่ https://eclipse.org/downloads/ และ OpenCv ที่http://docs.opencv.org/3.1.0/df/d65/tutorial_table_of_content_introduction.html  )


วิธี config Opencv สำหรับ eclipse

 บทความจากเวป ไซด์ http://docs.opencv.org/2.4/doc/tutorials/introduction/linux_eclipse/linux_eclipse.html

 

1 เปิด โปรเจคใหม่ เลือก File --> New --> C/C++ Project
2 ตั้งค่าชื่อโปรเจค ในช่อง Project name: ในตัวอย่าง คือ DisplayImage
3 ช่อง Project Type เลือก Empty Project
Toolchains เลือก Linux GCC
4แล้วค่าที่เหลือ ให้ปล่อยเป็น ดีฟอลไว้ จากนั้นกด Finish
5 ในช่อง Project Explorer เลือก ชื่อโปรเจคในตัวอย่างคือ DisplayImage คลิกขวา
6 สร้างโฟลเดอร์ใหม่ เลือก Folder ใส่ชื่อ src กด Finish
คลิกขวาที่ โฟลเดอร์ src กดเลือก New source file
ใส่ชื่อไฟล์ DisplayImage.cpp กด Finish
7 พิมพ์ โค้ดตามตัวอย่าง มีข้อสังเกตุ ที่ คำสัง

#include <highgui.h> เครื่องหมาย < และ  > เป็นการระบบุตำแหน่งของ ไฟล์
highgui.h อยู่ที่ตำแหน่ง library ของระบบ OS แต่ถ้าใช้คำสั่ง

#include "highgui.h" เครื่องหมาย " และ  " เป็นการระบบุตำแหน่งของ ไฟล์

highgui.h อยู่ที่ โฟลเดอร์ เดียวกันกับ โปรแกรม


#include <cv.h>
#include <highgui.h>

using namespace cv;

int main( int argc, char** argv )
{
  Mat image;
  image = imread( argv[1], 1 );

  if( argc != 2 || !image.data )
    {
      printf( "No image data \n" );
      return -1;
    }

  namedWindow( "Display Image", CV_WINDOW_AUTOSIZE );
  imshow( "Display Image", image );

  waitKey(0);

  return 0;
} 
 



8 เตรียมการเพือ กำหนด คอมพายเลอร์ และ ลิงค์


ตั้งค่า คอมพายเลอร์ Compiler
ในเทอร์มินอล ตรวจหาว่า ไฟล์ Include อยู่ที่ไหนโดยพิมพ์
$ pkg-config  - - cflags opencv
สังเกตุ หน้า cflags มีเครื่องหมาย - จำนวน 2 อัน




จากในภาพพบว่าอยู่ที่ usr/include/opencv เมื่อได้ค่าเรียบร้อยแล้ว ให้ทำการกำหนดค่า ไปที่


Project → Properties
ช่องด้านซ้าย เลือก c/c++ Build เลือก Setting ทางด้านขวาจะมีแทปให้เลือกหลายอัน เลือก Tool Setting
เลือกGCC C++ Compiler คลิก Include
จากนั้นในช่องซ้ายสุด Include paths(-l) ใส่ค่าตำแหน่งของ include ที่ได้ ในที่นี้คือ /usr/include/opencv


ตั้งค่า ลิงค Linker
ทำการหา library path ในเทอร์มินอลพิมพ์ คำสั่ง
$ pkg-config  - - libs opencv



จากในดัวอย่างพบว่าอยู่ที่ /usr/lib และมี libraries อยู่หลายตัว โดยมากจะใช้ libraries 3ตัวนี้ 
opencv_core
opencv_imgproc
opencv_highgui 
ทั้งนี้ต้องดูด้วยว่า ใน โปรแกรมที่เขียนเรียกใช้   libraries ใด ก็ให้เพิ่มเข้าไป เช่น ถ้าใช้เกียวกับ การรับภาพ วีดีโอ จาก กล้อง ก็ต้องใช้ opencv_videoio เป็นต้น

 
การตั้งค่าลิงค์เกอร์ ทำสองตำแหน่ง คือ
ลำดับที่หนี่ง libraries อยู่ที่ไหน ตั้งค้าที่ Library search Path(-L)
ลำดับที่สอง libraries มีชือว่าอะไรที่ต้องการใช้บ้าง ตั้งค้าที่ libraries

ทำดังนี้ Project → Properties
ช่องด้านซ้าย เลือก c/c++ Build เลือก Setting ทางด้านขวาจะมีแทปให้เลือกหลายอัน เลือก Tool Setting
เลือก GCC C++ Linker เลือก Libraries

ด้านซ้ายมือ Library search Path(-L) ใส่ค่า /usr/lib

ช่อง Libraries(-l) ให้ใส่ชือ libraries ที่ต้องการใช้งาน ในตัวอย่างใส่ทั้งหมดเลย แล้วกด OK


ทำการคอมพาย์ กด Project -->Build all
จะได้ ไฟล์ ที่พร้อมทำงาน อยู่ในโฟลเดอร์ workspace ให้ดูค่า เพอร์มิชชั่น สั่งงาน ด้วยเทอร์มินอล

 
 จะแสดงภาพชื่อ logo.png



Saturday, June 18, 2016

ตัวช่วยทดสอบ Digital voice


คำสั่ง sleep ช่วยทดสอบ Digital voice


(นักวิทยุสมัครเล่นขั้นต้น ไม่อนุญาติให้ทำการทดสอบ นะครับ ผู้เขียนแค่ศึกษา ไม่ได้ทดสอบออกอากาศ เลย  จริง จริงงงงงง)

ในการศึกษา การเข้ารหัสและถอดรหัสสัญญาณ ผู้เขียน ได้ QSO ตามความถี่ช่องต่างๆ ที่สัญญาณ พอไปถึง เพื่อหาคนช่วยศึกษา หา คู่สถานนี ที่ รู้เรื่อง Linux พอจะฟังวิธีศึกษา จากผู้เขียนเข้าใจไม่ได้ สุดท้ายเลย ต้องทำคนเดียว เป็นปัญหาอย่างมาก ที่ต้องกด คีย์ออกอากาศ ที่ เครื่องหนี่ง และ ไป ฟังอีกเครื่องหนึ่ง

เพื่อแก้ปัญหานี้ ก็เลย ให้ คอมพวิเตอร์ กด ออกอากาศให้
ใน โพสทนี้ จะใช้ คำสั่ง ตั้งเวลา เหมือนการวางระเบิดเวลา ด้วย คำสั่ง sleep ใช้คำสั่งนี้ ก็มีเวลามากพอไปเตรียม ถอดรหัสสัญญาณ ได้

รู้จักคำสั่ง sleep
sleep เป็นคำสั่งใน bash ใช้เพื่อหยุดการทำงานชั่วคราว มีรูปแบบการใช้งานดังนี้
$ sleep ตัวเลขกำหนดเวลา [Suffix]
Suffix มีความหมายดังนี้

s คือ วินาที (เป็นค่าดีฟอล์ท จะพิมพ์อักษร s หรือไม่ก็ได้)
m คือ นาที
h คือ ชั่วโมง
d คือ วัน
ลองใช้คำสั่งดู
$ sleep 3 (หรือ $ sleep 3s) เป็นคำสั่งให้หยุด 3 วินาที
$ sleep 1m เป็นคำสั่งให้หยุด 1 นาที (สังเกตุ หมายเลขหนึ่งและอักษร mพิมพ์ติดกัน)

ใน bash หากต้องการให้คำสั่งที่ 1 ทำงานสำเร็จ แล้ว ทำงานในคำสั่งที่ 2 ทำงานต่อเนื่อง ทำได้โดยใช้เครื่องหมาย && (หากคำสั่งที่ 1 ทำงานไม่สำเร็จ จะไม่ทำงานคำสั่งที่ 2) ลองทำสอบการใช้งานให้พิมพ์คำสั่ง

$ sleep 2 && echo “Done”

คอมพิวเตอร์จะหยุด 2 วินาที จากนั้นจะพิมพ์ คำว่า Done ออกทางจอภาพ


จากบทความฉบับที่แล้ว เราได้ติดตั้ง ไมโครโฟน ทั้งได้ปรับแต่งตั้งค่าไมโครโฟนด้วย alsamixer จากนั้นได้รู้จักโปรแกรมsox แล้ว
ให้ทดสอบการบันทึกเสียง
คำสั่งคือ rec ตามด้วยชื่อ ไฟล์ ตัวอย่าง เช่น

$ rec rectest.wav

เราจะได้ ไฟล์ชื่อ rectest.wav ที่ไดเรคทอรี่ ที่เรียกใช้งานปัจจุบัน จากนั้นลองเล่นเสียงด้วยคำสั่ง play

$ play rectest.wav

จะได้ยินเสียงที่ทำการบันทึกไว้

ต่อไปเราจะทำให้โปรแกรม sox สามารถรองรับ ไฟล์ mp3 ได้ ต้องติดตั้ง ไลเบอรี libsox-fmt-mp3 เพิ่มเติมด้วยคำสั่ง
$ sudo apt-get install libsox-fmt-mp3

ผู้เขียนได้ทำการ สร้างไฟล์เข้ารหัสเสียง ชื่อ codecAudio.mp3 มาไว้ในโฟลเดอร์ ที่ใช้งานปัจจุบัน เพื่อทำการทดสอบ
ต่อไปลองตั้งเวลาในตัวอย่าง ตั้งเวลา 1 นาที แล้วทำการเล่นเพลง codecAudio.mp3 ด้วยคำสั่งดังนี้

$ sleep 1m && play codecAudio.mp3

แล้วไปยัง เครื่องรับ เพื่อรับเสียง มาทำการทดสอบ ต่อไป
เออ คนเดียว ก็ทำได้วะ แต่ขาดเพื่อน ปรึกษา เวลา ติดปัญหา เนอะ




Tuesday, June 14, 2016

ตั้งเวลาอัดเสียง QSO ด้วย crontab


การใช้งาน crontabเพื่อตั้งเวลาให้บันทึกเสียง QSO ของ ศูนย์ ควบคุมข่าย


บทความก่อน ได้เสนอ สคริป อัดเสียง QSO ที่จะอัดเฉพาะ เวลามีเสียง โดยไม่อัด คีย์เปล่าที่ออกอากาศ ไปแล้ว คราวนี้ จะแนะนำคำสัง ให้ สคริป ทำงาน ตามเวลาทำกำหนด เป็นการตั้งครั้งเดียว ให้ทำงานเป็นวงรอบ จนกว่าจะสั่งให้เปลี่ยนแปลง
 
crontab เป็นคำสั่งที่จะทำงาน ตามเวลาที่ได้กำหนดไว้ในตารางเวลา หรือที่เรียกว่า cron table
งานที่สั่งให้คอมพิวเตอร์ ทำ เรียกว่า cron job

รูปแบบของ cron job
min hour dayOfMonth Month dayOfWeek cmd

min Minute 0-59
hour Hour 0-23
dom DayOfMonth 1-31
mon Month 1-12

ด้วยเหตุผลทางด้านความปลอดภัย ยูสเซอร์แต่ละคนจึงมี cron ส่วนตัว 
ที่ตำแหน่ง /var/spool/cron/crontabs/user
เรียกด้วย ยูเซอร์เนมส์ ในตัวอย่าง user คือ hs1zfk

$ crontab -u hs1zfk crontab.new

คำสั่งให้แสดง cron table ให้พิมพ์คำสั่ง
$ crontab -l

แสดง cron table โดยระบุ user ให้พิมพ์คำสั่ง
$ crontab -u username -l

คำสั่งเพื่อแก้ไข cron table ให้พิมพ์คำสั่ง
$ crontab -e

การกำหนดเวลาทำงานของโปรแกรมให้ ทำการสร้าง ไฟล์ ในตัวอย่างชื่อ mycronjobs.txt

เครื่องหมาย * หมายถึง ทำทุกๆนาที, ทุกชั่วโมง....
เครื่องหมาย , หมายถึง ทำงานเป็นช่วง
เครื่องหมาย – หมายถึง ทำงาน กำหนดเวลาเป็นช่วง
ตัวอย่างเช่น
$ cat /home/hs1zfk/mycronjobs.txt

01 00 * * * /bin/sh /home/root/bin/QSO_rec.sh

จากนั้น upload ไปยัง cron table ด้วยคำสั่ง
$ crontab /home/hs1zfk/mycronjobs.txt


คอมพิวเตอร์ก็จะทำงานตามวงรอบที่กำหนดไว้ใน cron table เมื่อต้องการลบcron table ให้ใช้คำสั่ง
$ crontab -r

การใช้งาน มีรูปแบบ สั่ง ทำงาน ,สั่งหยุด ,สั่งrestart ดังนี้

$ sudo /etc/init.d/cron start

$ sudo /etc/init.d/cron stop

$ sudo/etc/init.d/cron restart

ขอบคุณ ภาพจาก เวป http://tecadmin.net/crontab-in-linux-with-20-examples-of-cron-schedule/

Saturday, June 11, 2016

แปลงไฟล์ เสียงให้เป็น GSM





เปลี่ยน ไฟล์ wav ให้เป็น gsm ด้วย sox (Sound eXchange)

แจ้งไว้ตรงนี้ก่อนสำหรับผู้ที่ใช้ windows ถ้าอยากจะแปลงไฟล์เสียงเป็น ไฟล์ GSM ให้ใช้โปรแกรม Audacity


ทำการดาโหลด ได้ที่ http://www.audacityteam.org/download/



SoX ได้ชื่อว่า เป็น Swiss Army knife of audio สามารถทำงานเกี่ยวกับ เสียง ทั้งบันทึก เสียง เล่นไฟล์ เสียง แปลงไฟล์ เสียง ได้หลากหลาย อ่านรายละเอียดได้ที่ http://sox.sourceforge.net/soxformat.html

ไฟล์ เสียง GSM ย่อมาจาก Global System for Mobile Communications นิยมใช้ในการส่งข้อมูลเสียงในระบบ โทรศัพท์ เคลื่อนที่ปรกติ digital GSM จะมี sample rate ที่ 8000 hz (8 kHz)

ในบทความนี้ จะแปลงเสียง  จาก ไมโครโฟน ไปเป็น ไฟล์ เสียง GSM

ขั้นตอน ติดตั้ง SoX ด้วยเหตุที่ เราต้องการ แปลงเสียงเป็น gsm ทำให้ ต้องทำการติดตั้ง libraries libsox-fmt-all เพิ่มเพื่อทำการแปลงไฟล์ gsm ทำการติดตั้งด้วย

$ sudo apt-get install sox libsox-fmt-all
กดตอบ Y เพื่อเริ่มติดตั้ง




ลองทดสอบการ บันทึกเสียงด้วยคำสั่ง rec
 
$ rec -r 8000 -c 1 record_voice.gsm

-r 8000 คือค่า sample rate ที่ 8000 hz (8 kHz)
- c 1 คือ บันทึกเสียง แบบ mono
จะได้ไฟล์เสียง ชื่อ record_voice.gsm


เล่น ไฟล์เสียง gsm ด้วย คำสั่ง play