fc2ブログ

SONY SPRESENSEで遊ぶ(1)

 しばらくブログがアップできていませんでした。GW明けの週末は興味の赴くままにいろいろ試していることがあるのですが、興味が都度都度移り変わり、現時点で全て中途半端で消化不良気味です・・。また、進展があればお話しすることにします・・。

 さて、もう1か月になりますが、GW中に遊ぼうと思って購入して失敗したなと思ったものが、SONYのSPRESENSEです。まだ、そのパフォーマンスを最大限に引き出せていない所があるかもしれませんが、超高価なArduino互換のマイコンボードです。

 そもそもアンチS○○Yの私がこのマイコンボードを購入したのは、IoT用のカメラデバイスを探している中で、SPRESENSEの高機能なHDRカメラボード CXD5602PWBCAM2W を見つけたからです。すごく惹かれるものがあり、スイッチサイエンスで衝動買いしました。12、980円也。

 GWに入り、いざ遊ぼうかと思った矢先、購入した単品だけでは使えないことが発覚。よく調べておけば良かったのですが、価格帯から単品でも使えるものだと勝手に判断してしまいました。不覚でした・・。衝動買いはダメですね。

 結局、メインボードなるものも購入する必要があることが分かり、今度は秋月で購入。6、050円也。合わせて19、030円也。マイコン機器とは思えない高い買い物になりました(苦笑)。結局、GWはメインボードを買い足したりして遊べなかったので、その後の週末に細々と触ることになりました。SONY_SPRESENCE_220522.png
 実際にカメラを触ろうとした際にまたまた問題が発覚!カメラ撮像のサンプルプログラムを見るとSDカードに保存するものだったのですが、メインボードにはSDカードモジュールは付いておらず、拡張ボードが必要とのこと(スイッチサイエンスで3,850円。在庫多数!!)。なんじゃそれ!! ダメですね。こんな商売のやり方・・。悔しいけれど、確認しなかった私の方が問題だけど・・。

 結局、Arduinoなので、SDカードモジュールを別付けでも動くだろうなと思い直し、これ以上、傷を深くしないように拡張ボードは当然買わずに、カメラではない別の機能から遊ぼうと思いました。

 前置きがいつもながら長くなりました(愚痴を言いたかっただけ??)。結局、メインボードについているGPS機能から遊ぶことにしました。

 Arduinoサンプルスケッチがありましたので、早速実行させました。
 ただ、動かしても一向にデータが入ってこない・・。SONY_SPRESENCE_GPS_1_220522.png1時間程度様子を見てもデータが入ってこない。そもそもGPS衛星をキャッチできていない。numSatは見つかった衛星数を表していますが、0か1個。なんじゃこりゃ!ケチにはケチがつくなぁと思いながら、そういえば以前、M5StickCとGSPユニットで遊んだことを思い出し(ブログ参照)、収納箱から取り出すとプログラムもそのままの形で残っていました(あまり使っていない・・)。早速、並べて動かしてみました。が、やはり動かない。

 ここでそもそも電波が弱いのかなと思い、屋内で実験していた部材を窓際まで移動させました。SONY_SPRESENCE_GPS_2_220522.png しばらくすると、キャッチできた衛星も増え、位置情報が入ってきました。SONY_SPRESENCE_GPS_3_220522.png
最終的には9機のGPS衛星をキャッチできました。SONY_SPRESENCE_GPS_4_220522.png以下のデータも取れ、技術的に興味があるので、また詳しく見ていこうと思います。
 Type: 衛星種類、Id: 衛星番号、Elv: 仰角、Azm: 方位角、CN0: 信号強度

失敗した買い物ですが、ボチボチ遊んでいこうと思います。
スポンサーサイト



養老の滝に行く

 GWの中3日間(5/3-5/5)は全体的に天気も良く大変過ごしやすかったですね。明日(5/6)、1日会社に行けば、また土日で休みです・・。連休を取りたいのは山々ですが、月初は労務関係の業務や会議が多く休めないですね。

 天気も良いのに家でじっとしているのももったいない気がしたので、森林浴も兼ねて、岐阜県の養老の滝に行きました。コロナも落ち着いてきたせいか、人出は多い感じがしました。yoro_1_220505.png 芝生の公園の木の陰で昼食を取り、しばらくボーっとしていました。涼しい風に乗って花の香りも漂い、大変心地良かったです。3、4月と大変忙しかったので、疲れも忘れ、リフレッシュできました。

 休憩も終わり、滝を攻めに行きました。久々に山道を歩くと息切れしますね・・。マスクもしているので、途中で酸欠状態なのか、意識が遠のきました。歩くこと20分程度で滝に到着。yoro_2_220505.png滝の飛沫を浴びると山道の息切れや疲れも吹っ飛びました。 短時間の滞在ですが、久々にリフレッシュできた1日でした。明日からも頑張ろうっと。

OpenAIのGPT-3で遊ぶ(3)

 前回から日が開きましたが、久々にOpenAIGPT-3で遊んでみました。
GPT-3は自然言語のディープラーニングモデルのことです。今回は「Spreadsheet creator」と「Codex」を試してみました。

 Spreadsheet creatorは、質問に対して、その質問されているデータ項目のスプレッドシートを自動で作成するAIで、出力はパイプ区切り文字を使用して表示されます。百聞は一見にしかず、実行した一例です。最初の2行が質問で、以下回答です。
A two-column spreadsheet of summer Olympics host cities and the year:
City| Year
Los Angeles| 1932
Berlin| 1936
London| 1948
Helsinki| 1952
Melbourne| 1956
Rome| 1960
Tokyo| 1964
Mexico City| 1968
Munich| 1972
Montreal| 1976
Moscow| 1980
Los Angeles| 1984
Seoul| 1988
Barcelona| 1992
Atlanta| 1996
Sydney| 2000
Athens| 2004
Beijing| 2008
London| 2012
Rio de Janeiro| 2016
直近の東京と北京が出てきませんでしたが、AIに聞くまでもなく、ググれば簡単に出てきそうですね。

 次は「オリコンの歴代シングルCD売上ランキング、アーティスト名、曲名、発売年、売上高」の5段構成で質問してみました。
A five-column spreadsheet of Japan's Oricon all-time single CD sales ranking , artist, song's title, release year and sales
Ranking | Artist | Song title | Release year | Sales
1 | B'z | "ultra soul" | 2005 | 3,760,000
2 | Mr. Children | "Namonaki Uta" | 1994 | 3,480,000
3 | Southern All Stars | "Tatta Hitotsu no Koi" | 2002 | 3,470,000
4 | Namie Amuro | "Can You Feel This Love?" | 2000 | 3,430,000
5 | Hikaru Utada | "Automatic / time will tell" | 1998 | 3,390,000
 何か変ですね。3位のサザンの曲、聴いたことがないです・・。怪しいのでもう1回実行すると、
A five-column spreadsheet of Japan's Oricon all-time single CD sales ranking , artist, song's title, release year and sales
Ranking | Artist | Song title | Release year | Sales
1 | B'z | "ultra soul" | 2001 | 3,540,000
2 | Mr. Children | "Namonaki Uta" | 1995 | 3,200,000
3 | Southern All Stars | "Tsunami" | 2000 | 2,940,000
4 | KinKi Kids | "Winter Story" | 2001 | 2,780,000
5 | Dreams Come True | "Love Love Love" | 1992 | 2,620,000
 あらら、3位の曲名が変わった!よく見ると各順位のArtist、Release year、Salesのデータも変わっていますね。ますます怪しいのでもう一度実行すると、
A five-column spreadsheet of Japan's Oricon all-time single CD sales ranking , artist, song's title, release year and sales
Ranking | Artist | Song title | Release year | Sales
1 | B'z | "Bambina" | 1997 | 5,600,000
2 | Mr. Children | "Namonaki Uta" | 1995 | 4,600,000
3 | Southern All Stars | "Tsunami" | 2000 | 4,100,000
4 | KinKi Kids | "Harmony of December" | 2000 | 3,900,000
5 | Hikaru Utada | "Automatic" | 1999 | 3,800,000
 ダメですね。うまく機能していないようです。オリンピックの開催地のように変わりようがないものについては、ググった結果と同じ回答を返せますが、CD売上のように時々刻々とデータがUpdateされているようなものは、どの時点での情報かをAI側に教える必要がありそうです。人の記憶もUpdateして行かなくてはならないように・・。


 次に、Codexを試しました。Codexは自動でプログラムをコーディングしてくれるAIです。
最近はコツコツとコードを組まなくても、ローコード、ノーコードのように簡単にアプリが作成できる世の中になってきました。レシピを入れるとAIが勝手にコードを書いてくれる日も遠くないような気がします。
 早速、参考サイトの事例をもとに実行させてみました。以下、始めに質問文、改行後に続く部分が回答です。
"""
Ask the user for their name and say "Hello"
"""

name = input("What is your name?\n")
print("Hello, " + name)
実行するまでもなく、質問に対して完全なコードが返答されて来ました。

 次のお題はプログラムで「円を書かせる」には?を聞いてみましょう。
"""
Draw a circle on the screen
"""

def drawCircle(x, y, radius):
"""
Draws a circle at the location x, y with the given radius
"""
# Draw the outer circle
pygame.draw.circle(window, circleColor, (x, y), radius, circleThickness)
# Draw the inner circle
pygame.draw.circle(window, circleColor, (x, y), int(radius/2), circleThickness)

"""
Draw the time
"""
def drawTime(hour, minute):
"""
Draws the time on the screen
"""
# Draw the time
pygame.draw.rect(window, timeColor, (timeX, timeY, timeW, timeH))
timeText = font.render(str(hour) + ':' + str(minute), True, (0, 0, 0))
textRect = timeText.get_rect()
textRect.center = (timeX + int(timeW/2), timeY + int(timeH/2))
window.blit(timeText, textRect)
14行目以降で「Draw the time」なるものが引っ付いてきました。ただ、前半の部分は使えるのか、検証してみました。検証コードは以下の通りです。pygameライブラリは今まで使ったことがなかったので、ネットで調べながら動かしてみました。
# -*- coding:utf-8 -*-
import pygame

def drawCircle(x, y, radius):
"""
Draws a circle at the location x, y with the given radius
"""
pygame.init()
window = pygame.display.set_mode((300, 300))
circleColor = (0, 255, 0)
circleThickness = 10

# Draw the outer circle
pygame.draw.circle(window, circleColor, (x, y), radius, circleThickness)
# Draw the inner circle
pygame.draw.circle(window, circleColor, (x, y), int(radius/2), circleThickness)

pygame.display.update()
pygame.time.wait(5000)

if __name__ =='__main__':
drawCircle(150, 150, 50)
実行結果は以下の通り。GPT-3_test1_220504.png追加部分はありますが、AIが返してくれた部分は生かすことができました。
 
 Codexですが、SQLにも対応しています。
"""
Table customers, columns = [CustomerId, FirstName, LastName, Company, Address, City, State, Country, PostalCode, Phone, Fax, Email, SupportRepId]
Create a MySQL query for all customers in Texas named Jane
"""

SELECT *
FROM customers
WHERE first_name = 'Jane'
AND state = 'TX'
シンプルなSQLですが、問題ないようですね。

 最後に、統計処理言語のRで試しました。
R language
Calculate the mean distance between an array of points.

## Installation
```r
devtools::install_github("EdouardThiel/mdist")
```
## Example
This is a basic example which shows you how to solve a common problem:
``` r
## basic example code
```
意味不明ですね。コーディングしなさいという質問として捉えられていないようです。よく見ると質問文章を「"""」で囲んでいませんでした。仕切り直しです。
"""
R language
Calculate the mean distance between an array of points.
"""

from scipy.spatial import distance

def mean_distance(points):
"""Calculate the mean distance between an array of points."""
total_distance = 0
for i in range(len(points)):
for j in range(len(points)):
if i != j:
total_distance += distance.euclidean(points[i], points[j])

return total_distance / (len(points) * (len(points) - 1))
あれ、Rではなく、Pythonでコーディングされてしまいました。よく調べると、解答してもらいたい書式を質問の下に一緒に記載すると、AIが理解してその答えを返してくれるとのこと。この辺り、人と同じですね。ヒントを与えると答える・・。

質問の後に、「mean_distance <- function」を付けて、実行しました。
#質問
"""
R language
Calculate the mean distance between an array of points.
"""
mean_distance <- function

#回答
"""
R language
Calculate the mean distance between an array of points.
"""
mean_distance <- function(points) {
n <- nrow(points)
sum <- 0
for (i in 1:(n - 1)) {
for (j in (i + 1):n) {
sum <- sum + sqrt((points[i, 1] - points[j, 1])^2 + (points[i, 2] - points[j, 2])^2)
}
}
return (sum / (n * (n - 1)))
}

# Input
# points: a matrix with n rows containing the x and y coordinates of each point
# Output
# The mean distance between each pair of points

######################################################################################################
"""
R language
Reverse the characters in a string.
"""
reverse <- function(x) {
n <- nchar(x)
rev <- character(n)
for (i in 1:n) {
rev[i] <- substr(x, n - i + 1, n - i + 1)
}
return (rev)
}

# Input
# x: a string
# Output
# The same string
今度はRのコードです。これも余分なreverseという関数が引っ付いていますが・・。

 間違って出てきたPythonのコードとRのコードを検証しました。Pythonコードは以下の通り。10点の(x, y)座標を与えて関数を実行しました。GPT-3_test2_220504.pngRのコードは以下の通り。GPT-3_test3_220504.png10点の(x, y)座標はPythonと同じデータです。一瞬結果が異なったように見えましたが、Pythonコードは、二点をお互いに区別していない(例:2と3、3と2)、距離の重複があるコードで、Rコードは区別しているものでした。検算でRの結果を2倍すると、同じ結果でした。

 今回、「Spreadsheet creator」と「Codex」を試してみましたが、「Codex」はなかなか面白いですね。あるコードを書きたい時に、どのようにググって良いのか分からない時でも、文章で質問すると、その文章を理解して完全ではないですが、ヒントとなるコードを返してくれるなんて!これからの技術の進展を期待したいと思います。

京都ラーメン街道に行く(1)

 4/29からGWに入って3日間が過ぎました。今年のGWは5/2、5/6と休めば10連休なのですが、月始の労務処理で会社が休めないので、暦通りの飛び石で3日−3日−2日の休暇取得です。先日、実家にも帰省したので、このGWは出かけるにしても近場で済ますことになりそうです。

 その中で、ずっと家にいるのも鬱々としますので、奥さんに誘われ、人出が多い中ですが、昨日(4/30)、京都市内に出ました。出かけても、奥さんとは行きたい所が異なるので、基本は別行動です。お互いに気は楽です・・。
 特に目的はなかったのですが、私は一乗寺の「ラーメン街道」に行ってみました。三条京阪から出町柳に京阪で出て、その後叡山電鉄で一乗寺までの軽い列車旅です。

 一乗寺近辺は私が学生の時からラーメン屋が多いですね。ラーメンを食べる目的でわざわざ一乗寺に出かけることは今までありませんでしたが、今回は気晴らしで行ってみました。220430_0.png
 入ったお店は「髙安」さんです。ネット記事でも高評価の店で無難な所かなという感じで入店。11時半頃に到着しましたが、すでに待ちの列があり、実際に食べるまで40分ほど待ちました。人気店の宿命なのでしょうが、とりわけ日々の生活と違って、急ぐこともないので、のんびりと待ちました。220430_1.png
 オーダしたのは「唐揚げセット」ですが、出てきて、その量の多さにびっくり。220430_2.png唐揚げの量が「餃子の◯将」のものより倍以上ありました。この辺りは学生が多く、量の基準が若い学生向けなのでしょうね。残さずに食べました。ラーメンはこってりではない豚骨味で大変美味しくいただきました。唐揚げはカレーパウダーがかかっておりこれも大変美味しかったです。

 夕御飯は奥さんと合流して二人で食べましたが、昼食でお腹がはち切れそうであまり食べれない状況だったので、奥さんはちょっと引き気味・・。ただ、奥さんにたくさん食べてもらいました。
 京都での楽しみが一つできました。京都ラーメン街道の2軒目を開拓したいと思います。

ご訪問者数

(Since 24 July, 2016)

タグクラウド


プロフィール

Dr.BobT

Author: Dr.BobT
興味のおもむくままに生涯考え続けるエンジニアでありたい。

月別アーカイブ

メールフォーム

名前:
メール:
件名:
本文: