googleの生成AIのBardがGeminiになった。その実力を見るために何かプログラムを作って確かめてみた。 気象庁では定期的にXMLフォーマット形式の電文を配信している。 このXMLファイルを定期的に自動で読み込めばHP上に天気予報を表示できるので実際にGoogleGeminiを使用してプログラムしてみた。 以下に表示に至るまでの方法をステップごとに備忘録として記録する。 ===========
ステップ1. 気象庁のXMLフォーマット形式の電文を定期的に取り込む。 サーバーのcrontabで定期的にXMLファイルを取り込むよう設定。 気象庁のファイルは「https://www.data.jma.go.jp/developer/xml/feed/regular_l.xml 」にある。 読み込む方法はfreeBSDならfetchコマンドで取り込む。 fetch -mp -o /自分のサーバーのパス/weatherJapan.rdf https://www.data.jma.go.jp/developer/xml/feed/regular_l.xml 以上で、自身のサーバー内にweatherJapan.rdfファイルとして取り込み完了。 ---------------
ステップ2. 取り込んだデータから「山梨県の最新データ」を取り込む。 「ステップ1」で取り込んだ気象庁のデータは全国の気象データのindexのようなものなので、そこから山梨県の最新気象データを抽出する。 具体的には、indexに並んでいるデータ群(過去データもある)から目的のデータを見つける。 山梨県の気象予報なら、甲府気象台の「https://www.data.jma.go.jp/developer/xml/data/ データの日付_0_VPFD51_190000.xml」となる。 データは過去のアーカイブを含むので最新のデータ、つまりリストの先頭のindexを引く。 indexの引き方はunixのshellScriptで自動化する。 生成AIで、「VPFD51_190000を含むリストの先頭の文字を取り出すshellScriptを書け」と命令。 weatherF=$(grep -Eo 'https:\/\/www\.data\.jma\.go\.jp\/developer\/xml\/data\/(.*)VPFD51_190000\.xml' /自分のサーバーのパス/weatherJapan.rdf | awk -F/ '{print $NF}' | head -1) 上記の回答を得る。 次は変数weatherFを使用して山梨県のXMLデータをfetchで読み込む。 fetch -mp -o /自分のサーバーのパス/weatherYamanashi.rdf https://www.data.jma.go.jp/developer/xml/data/" ${weatherF}" 以上で、自身のサーバー内にweatherYamanashi.rdfファイルとして取り込み完了。 <Gemini最初の指令>https://www.data.jma.go.jp/developer/xml/feed/regular_l.xml にあるXMLファイルからhttps://www.data.jma.go.jp/developer/xml/data/ *****_VPFD51_190000.xml の部分を抽出し、抽出した先頭のみを表示するシェルを書け。 ただし、「*****」は任意の文字列。 解答→正規表現とgrepのパターンを提示してきた。正規表現はエラーになったのでgrepを使用し改良して使用。 ---------------
ステップ3. 「ステップ1」と「ステップ2」をcrontabで定期的に実行するようサーバーに記述する。 <weatherYamanashi.rdfファイルの中身例> 前段あり〜 <DateTime>2024-02-13T17:00:00+09:00</DateTime> <Duration>PT7H</Duration> <Name>今夜</Name> </TimeDefine> <TimeDefine timeId="2"> <DateTime>2024-02-14T00:00:00+09:00</DateTime> <Duration>P1D</Duration> <Name>明日</Name> </TimeDefine> <TimeDefine timeId="3"> <DateTime>2024-02-15T00:00:00+09:00</DateTime> <Duration>P1D</Duration> <Name>明後日</Name> </TimeDefine> </TimeDefines> <Item> <Kind> <Property> <Type>天気</Type> <DetailForecast> <WeatherForecastPart refID="1"> <Sentence>晴れ</Sentence> <Base> <jmx_eb:Weather type="天気">晴れ</jmx_eb:Weather> </Base> </WeatherForecastPart> <WeatherForecastPart refID="2"> <Sentence>晴れ 昼過ぎ から くもり</Sentence> <Base> <jmx_eb:Weather type="天気">晴れ</jmx_eb:Weather> </Base> <Becoming> <TimeModifier>昼過ぎ から</TimeModifier> <jmx_eb:Weather type="天気">くもり</jmx_eb:Weather> </Becoming> </WeatherForecastPart> <WeatherForecastPart refID="3"> <Sentence>くもり 後 一時 雨</Sentence> <Base> <jmx_eb:Weather type="天気">くもり</jmx_eb:Weather> </Base> <Temporary> <TimeModifier>後 一時</TimeModifier> <jmx_eb:Weather type="天気">雨</jmx_eb:Weather> </Temporary> </WeatherForecastPart> </DetailForecast> <WeatherPart> <jmx_eb:Weather refID="1" type="天気">晴れ</jmx_eb:Weather> <jmx_eb:Weather refID="2" type="天気">晴れ後くもり</jmx_eb:Weather> <jmx_eb:Weather refID="3" type="天気">くもり後一時雨</jmx_eb:Weather> </WeatherPart> <WeatherCodePart> <jmx_eb:WeatherCode refID="1" type="天気予報用テロップ番号">100</jmx_eb:WeatherCode> <jmx_eb:WeatherCode refID="2" type="天気予報用テロップ番号">111</jmx_eb:WeatherCode> <jmx_eb:WeatherCode refID="3" type="天気予報用テロップ番号">212</jmx_eb:WeatherCode> </WeatherCodePart> </Property> </Kind> <Kind> <Property> <Type>風</Type> 〜以下続く ---------------
ステップ4. 定期的に取り込んだ山梨県の天気予報データ(weatherYamanashi.rdf)を解析する。 解析にはperlプログラムを使用する。 必要な部分のみperlの正規表現を使用してプログラムしようとしたが、今回は「XML::Simple;」を使用することにした。 use File::Slurp; use XML::Simple; use Data::Dumper; my $xml = read_file("weatherYamanashi.rdf"); #ファイルの読み my $parser = XML::Simple->new(); #XML::Simple使用準備 my $parser_data = $parser->XMLin( $xml); #取り込み print Dumper($parser_data); #結果表示 〜取り込まれたデータ例 $VAR1 = { 'xmlns' => 'http://xml.kishou.go.jp/jmaxml1/ ', 'xmlns:jmx' => 'http://xml.kishou.go.jp/jmaxml1/ ', 'Control' => { 'DateTime' => '2024-02-11T01:34:15Z', 'Status' => "\x{901a}\x{5e38}", 'PublishingOffice' => "\x{7532}\x{5e9c}\x{5730}\x{65b9}\x{6c17}\x{8c61}\x{53f0}", 'EditorialOffice' => "\x{7532}\x{5e9c}\x{5730}\x{65b9}\x{6c17}\x{8c61}\x{53f0}", 'Title' => "\x{5e9c}\x{770c}\x{5929}\x{6c17}\x{4e88}\x{5831}\x{ff08}\x{ff32}\x{ff11}\x{ff09}" }, 'Head' => { 'xmlns' => 'http://xml.kishou.go.jp/jmaxml1/informationBasis1/ ', 'TargetDateTime' => '2024-02-11T11:00:00+09:00', 'Headline' => { 'Text' => {} }, 'InfoKind' => "\x{5e9c}\x{770c}\x{5929}\x{6c17}\x{4e88}\x{5831}", 'TargetDuration' => 'P2DT13H', 'EventID' => {}, 'Serial' => {}, 'Title' => "\x{5c71}\x{68a8}\x{770c}\x{5e9c}\x{770c}\x{5929}\x{6c17}\x{4e88}\x{5831}", 'InfoType' => "\x{767a}\x{8868}", 'InfoKindVersion' => '1.0_1', 'ReportDateTime' => '2024-02-11T11:00:00+09:00' }, 'xmlns:jmx_add' => 'http://xml.kishou.go.jp/jmaxml1/addition1/ ', 'Body' => { 'xmlns' => 'http://xml.kishou.go.jp/jmaxml1/body/meteorology1/ ', 'xmlns:jmx_eb' => 'http://xml.kishou.go.jp/jmaxml1/elementBasis1/ ', 'MeteorologicalInfos' => [ { 'TimeSeriesInfo' => [ { 'Item' => [ { 'Area' => { 'Code' => '190010', 'Name' => "\x{4e2d}\x{30fb}\x{897f}\x{90e8}" ---------------
ステップ5. 必要な部分のみ取り出す 例えば、天気予報の部分を取り出す sub getJMAWeatherTenki{ my $data = shift; #取り込んだハッシュ my $place_id = shift; #地域コード:富士五湖=1 my $time_id = shift; #今日=1,明日=2、明後日=3 my $content; foreach my $weather_define ( @{$data->{Body}{MeteorologicalInfos}[0]{TimeSeriesInfo}[0]{Item}[$place_id]{Kind}[0]{Property}{WeatherPart}{'jmx_eb:Weather'}} ){ if( $weather_define->{refID}==$time_id ){ $content = $weather_define->{content}; } } return $content; } 戻り値例:「くもり後晴れ」 <Gemini最初の指令> weatherYamanashi.rdfを解析し、天気データ「{jmx_eb:Weather}」の「{refID}」が一致する文字列「{content}」を得よ。 解答→得た答えを修正して上記を仕上げた。 ---------------
ステップ6. 天気予報の文字から画像を作成する まず以下の画像データを意味付けしたファイル名で作成する。 文字列から画像ファイル名を構成する。 sub getJMAWeatherImg{ my $weather_str = shift; #天気文字列 my $time_id = shift; # my %exDayId = ( '今日' => 1, '明日' => 2, '明後日' => 3 ); use constant WEATHER_CODES => { '晴れ' => 1, 'くもり' => 2, '雨' => 3, '雪' => 4, }; use constant TIME_CODES => { '時々' => 1, '後' => 2, }; my @parts = split(/(後|時々)/, $weather_str); my $a = WEATHER_CODES->{ $parts[0] } || 0; my $b = TIME_CODES->{ $parts[1] } || 0; my $c = WEATHER_CODES->{ $parts[2] } || 0; my $p = 0; my $name; #以下は「今夜」の場合を考慮する foreach my $time_define ( @{$exParserData->{Body}{MeteorologicalInfos}[0]{TimeSeriesInfo}[0]{TimeDefines}{TimeDefine}} ){ if( $time_define->{timeId}==$time_id ){ $name = $time_define->{Name}; } } Jcode::convert( \$name, 'utf-8'); #ファイル内はUTF-8だが、そのままでは使用できない my $fDayw = Jcode::convert( '今夜', 'utf-8'); #そのため比べる両者をUTF-8で再矯正する if( $name eq $fDayw ){ $p = 1; } my $fileImg = sprintf("tnk%04d.png", $p . $a . $b . $c); return $fileImg; } 何故か文字化けが発生し苦労したが上記の方法で回避 <Gemini最初の指令> 「晴れ」、「晴れ後くもり」、「雨時々雪」と言った文字列があります。 「後」と「時々」をキーに文字列を前後に分けて上の例なら、 「晴れ」、「晴れ」「後」「くもり」、「雨」「時々」「雪」と文字列を分解するperlプログラムを書け。 〜 得た文字列を、「晴れ」=1、「くもり」=2、…のように3桁の数字に置き換えよ。 解答→得た答えを修正して上記を仕上げた。 ---------------
ステップ7. 以上のプログラムを半分以上生成AIに手伝ってもらい完成させた。 あとは自分の環境に合わせて関数化し汎用ライブラリーとして保管。 --------------- 以上、動作例は「https://live.fujigoko.tv/?n=30 」等を参照。 今回は自身と気象庁のサーバー負荷を考え以上のようにしたが、「ステップ1」と「ステップ2」を省いて全てperlで記述すればその都度全国の気象データを得ることができる。 具体的には、https://www.data.jma.go.jp/developer/xml/feed/regular_l.xml から全国の気象データを抽出すれば良いようにプログラムをさらに汎用化し公開もできる。 が、自身のサーバーでそのサービスを提供するメリットがあるかどうかと考えてしまった。 #コンピュータ #AI #人工知能 #プログラム
全てをchatGPTだけでプログラムしようとした。 プログラム言語は「LUA」というスクリプト言語で、C言語に近い。ところが、私は今までLUAを使ったことが無かった。 そこで、chatGPTと相談しながら作業を進めることにしたのである。 やりたいことは、動画配信で日中は富士山、夜間は水槽の動画を配信すること。
まず、日没と日の入りを求める関数を作るため以下のように指令した。 「動画配信ソフトのLUAを使用して日の出と日の入りを求めるget_SunrizeSunset関数を作成せよ。ただし、引数に緯度経度と求める日を使うこと」 早速プログラムコードが出てきたので、次の指令をした。 「先の関数を使用して日中の場合はTrue、夜間の場合はFalseを返すこと。」 だんだんプログラムが長くなった。 「動画配信ソフトOBSを使用して日中ならFUJI、夜間ならAQUAのシーンを選択すること」 「日の出と日没時間にマージンを持たせるように改良せよ」 幾つか齟齬があって修正を繰り返し一行もソースコードを書かずにプログラムが完成し、動画配信OBSに実装した。
ところが、ここから長かった。 実装すると日没と日の入り時間になってもシーン(カメラ)が切り替わらない。 どうやら日没と日の入り時間が間違っているようだ。 一行もコードを書かないと決めていたので言葉だけで修正を求める。 例えば、「日本時間に対応しているか?」とか「どこかに誤りはないか?」とか。 その都度、黙々と文句を言わずコードを修正して返してくるchatGPT。 途中で「天体の運行がどう」とか「LUAは数学演算が苦手」だとか「さらに精密な計算をしてみる」とか言い訳が始まってプログラムリストはどんどん長くなる。 そこで「おおまかな時間が分かればよい」と指令すると「私には分からないので他の言語のライブラリの使用を勧められた」 この間約半日ほど経過していた。私はただchatGPTのコードをコピペして結果を報告するだけだった。途中面白いのは「以下の値がどうなっているか教えて」とか必死にデバッグに励んでいたことだった。 そして、とうとうchatGPTでは正解にたどり着けなかった。 仕方が無いのでgoogleで検索すると日の入り日没を求める関数がすぐに見つかった。 私にとって初見のLUAだったが何度も修正リストを見ていたので言語の記述方法は理解できたこともあり、見つけた関数の部分だけchatGPTのプログラムと置き換えたらちゃんと動作した。 結果的にだがchatGPTは太陽系の運行から日の出日没を求めようとして失敗したが、googleで見つけた関数は緯度経度を考慮した地球から太陽の位置を求めていた。 私的には精密な日の出日没が欲しかったわけではなく「カメラの切り替えをしたいだけなのでだいたいな時間」が分かればよかったわけだ。 しかし、時間を求めること以外のプログラムはchatGPTのままで動作した。例えば動画配信ソフトでのカメラの切り替えとか日中とかの判断する部分。 つまり、単純に欲しい関数の使用を伝えそれらを組み合わせて全体を構築する部分の運用は意図通りの関数を作成してくれた。 もちろん、目的を達成するために関数という部品をどのように分解して伝えるのかという部分は人間が考えるのだが、その辺も理解して仕様通りの関数を作成してくれた。 この全体のシステムをどのように分解していくのが後工程を楽にするかはシステム設計の基礎が無ければならない。 chatGPTへの指令次第では長大なプログラムリストになり、ミスや修正が難しくなる。 ようするに今回は「日の出日没」の時間を得る関数の入れ替えで簡単に修正できた。 私の反省点として関数を作成する都度、実行結果の予想と結果を報告すれば良かったと思う。 関数の指令を与えながら次第に全体が出来上がるまでコピペのみですませようと少し過信しすぎた。それほどこちらに考える間を与えずプログラムリストを吐き出してくるのにはまってしまった。 というわけで出来上がった動画配信の様子は現在、 https://www.youtube.com/watch?v=mWm6luQ1d7M で見ることができる。 日の出30分前から富士山画像へ、日没後20分後から水槽カメラへと切り替わる。 以降、LUAで動画配信OBSでカメラシーンを切り替えるスクリプトのプログラムリスト。
obs = require('obslua') os = require('os') scene_now = "" scene_WEB251 = "WEB251" -- 富士山カメラ scene_WEB252 = "WEB252" -- 水槽カメラ latitude = 35.68039639541995 -- 緯度経度は東京駅にしてある longitude = 139.76788440520536 sunrise_margin = -30 -- 分単位で指定(2時間前=-120) sunset_margin = 30 -- 分単位で指定(2時間後=120) -- sunrise / sunset calculation function rscalc(latitude, longitude, when) local pi = math.pi local doublepi = pi * 2 local rads = pi / 180.0 local TZ = function(when) local ts = os.time(when) local utcdate, localdate = os.date('!*t', ts), os.date('*t', ts) localdate.isdst = false local diff = os.time(localdate) - os.time(utcdate) return math.floor(diff / 3600) end local range = function(x) local a = x / doublepi local b = doublepi * (a - math.floor(a)) return b < 0 and (doublepi + b) or b end when = when or os.date('*t') local y2k = { year = 2000, month = 1, day = 1 } local y2kdays = os.time(when) - os.time(y2k) y2kdays = math.ceil(y2kdays / 86400) local meanlongitude = range(280.461 * rads + 0.9856474 * rads * y2kdays) local meananomaly = range(357.528 * rads + 0.9856003 * rads * y2kdays) local lambda = range(meanlongitude + 1.915 * rads * math.sin(meananomaly) + rads / 50 * math.sin(2 * meananomaly)) local obliq = 23.439 * rads - y2kdays * rads / 2500000 local alpha = math.atan2(math.cos(obliq) * math.sin(lambda), math.cos(lambda)) local declination = math.asin(math.sin(obliq) * math.sin(lambda)) local LL = meanlongitude - alpha if meanlongitude < pi then LL = LL + doublepi end local dfo = pi / 216.45 if latitude < 0 then dfo = -dfo end local fo = math.min(math.tan(declination + dfo) * math.tan(latitude * rads), 1) local ha = 12 * math.asin(fo) / pi + 6 local timezone = TZ(when) local equation = 12 + timezone + 24 * (1 - LL / doublepi) - longitude / 15 local sunrise, sunset = equation - ha, equation + ha if sunrise > 24 then sunrise = sunrise - 24 end if sunset > 24 then sunset = sunset - 24 end return math.floor(sunrise * 60), math.ceil(sunset * 60) end --本日の日中かどうか審議する function is_daytime(latitude, longitude, sunrise_margin, sunset_margin) local date = os.date("*t") local sunrise, sunset = rscalc(latitude, longitude, date) -- obs.script_log(obs.LOG_INFO, "Sunrize(min): " .. sunrise) -- obs.script_log(obs.LOG_INFO, "Sunset(min): " .. sunset) sunrise = sunrise + sunrise_margin sunset = sunset + sunset_margin local zero_oclock = os.time({year = date.year, month = date.month, day = date.day, hour = 0}) -- 与えられた日の日の出と日の入りの時間(秒)を計算 local sunrise_sec = zero_oclock + sunrise * 60 local sunset_sec = zero_oclock + sunset * 60 local now_sec = os.time(date) --[[ Debug Section START local t = os.date("*t", sunrise_sec) local time_str = string.format("%04d-%02d-%02d %02d:%02d:%02d", t.year, t.month, t.day, t.hour, t.min, t.sec) obs.script_log(obs.LOG_INFO, "Current time: " .. time_str) local t = os.date("*t", sunset_sec) local time_str = string.format("%04d-%02d-%02d %02d:%02d:%02d", t.year, t.month, t.day, t.hour, t.min, t.sec) obs.script_log(obs.LOG_INFO, "Current time: " .. time_str) ]] if sunrise_sec <= now_sec and now_sec <= sunset_sec then return true else return false end end --シーンの切り替え function switch_scene(scene_name) local scenes = obs.obs_frontend_get_scenes() for _, scene in ipairs(scenes) do local scenes_list = obs.obs_source_get_name(scene) if scenes_list == scene_name then if scenes_now ~= scene_name then scenes_now = scene_name obs.obs_frontend_set_current_scene(scene) local t = os.date("*t") local chg_str = string.format("%02d-%02d %02d:%02d -- %s", t.month, t.day, t.hour, t.min, scene_name) obs.script_log(obs.LOG_INFO, "Switched scene: " .. chg_str) end break end end end --日中ならWEB251、夜ならWEB252 function check_time() if is_daytime(latitude, longitude, sunrise_margin, sunset_margin) then switch_scene(scene_WEB251) else switch_scene(scene_WEB252) end end -- function script_description() return "Script to switch scenes at specified times." end -- function script_load(settings) obs.timer_add(check_time, 60 * 1000) end
#chatGPT #プログラム #OBS #動画配信
VIDEO
< 1月7日 >に発令をした1都3県 緊急事態宣言に伴いまして 下記の< 河口湖 冬花火>は中止になりました。 01/16(土)・01/17(日)・01/23(土)・01/24(日)・01/30(土)・01/31(日)・02/06(土)・02/07(日)・
四季を通してみた富士山の映像が完成しました。 本編は38分あり、「冬」「雪解」「春」「流鏑馬」「火入れ」「17年周期」「青嵐」「雲」「青葉」「富士講」「山開き」「富士山へ」「富士登山」「夏」「火祭り」「秋」の各章からできています。
VIDEO
一般にはあまり関係ないことですが、コンピュータ業界にとってプログラムの修正がいくつか出てきます…特に公文書系の書式フォーマットは元号の入った規定用紙を使用した作りとなっているので、システム内の用紙変更が必須。また、4月1日には裏設定で元号←→西暦の変換テーブルに「新元号=2019(実際は1900年から2019年5月1日までの総日数)」の書換をいくつか行うことになります。
コンピュータに携わるものとして和暦計算に以下の数字は敏感に反応します。 ・明治5年(1872年)12月2日までは旧暦、1873年1月1日(旧暦12月3日)より現在の和暦明治6年1月1日スタート。 ・1900年(明治33年)1月1日、主にパソコン内の0日基準→経過日数が分かります。システムによって違う。特別な閏年。 ・1904年(明治37年)1月1日、主にパソコン内の0日基準→経過日数が分かります。システムによって違う。通常閏年。 ・1970年(昭和45年)1月1日、UNIX時間(UTC)の0秒基準→経過秒数が分かります。ちなみに日本時間(JST)は+9時間。 一般的に和暦は明治以降を扱うので1900年(または1904年)1月1日を基準にコンピュータから知りたい日までの経過日数を得ます。 ・大正元年(1912年7月30日)は1900年から4,593日。 ・昭和元年(1926年12月25日)は1900年から9,854日。 ・平成元年(1989年1月8日)は1900年から32,514日。 ・令和元年(2019年5月1日)は1900年から43,584日。 プログラム的には「知りたい日の経過日数をコンピュータから教えてもらい4,593未満なら明治、9,854未満なら大正、…と順番に処理し、43,584未満なら平成、どれにも当てはまらない場合は令和」と処理する。
ちなみに、西暦元年からの経過日数は以下の式(フェアフィールドの公式)でも求められます。 ・4の倍数の年は閏年。 ・ただし、100の倍数の年は閏年ではない。 ・しかし、400の倍数の年は閏年。 の規則に従い、近似値直線の整数グリッドを上手に利用して、dm =| ( 306 m -324 ) / 10|→dm =| ( 979 m -1033 ) / 32|を活用して求められます。 参考のためCのプログラムで記述すると、 int GetDays(int y, int m, int d){ if (m <= 2){ --y; m += 12; } int dy = 365 * (y - 1); int c = y / 100; int dl = (y >> 2) - c + (c >> 2); int dm = (m * 979 - 1033) >> 5; return dy + dl + dm + d - 1; }
で、次回問題になるのは、「明・大・昭・平・令」という公文書で良くある選択肢。 このうち「明」の字をいつ消すのか?問題です。 つまり、今消すわけにはいかないけれど10年以外には消すことになると思います。要するにあと数回は地道に公文書の書式変更があるということです。
2000年問題 西暦の下2桁で年を判定していたシステムは1999年(99)→2000年(00)の瞬間にシステムが1900年だと思うことで不具合が出ると予想されました。 特にマイナス年の扱いができていないシステムは何が起こるか分からなかった。 うるう秒 地球の回転とのズレでうるう秒として1秒追加されるときがあります。 例えば2012年7月1日午前9時(JST)、2015年7月1日午前9時(JST)など。 一部パソコンソフトで0時をまたぐ使用方法で間違った値を返すという不具合が報告されています。 2038年問題 2000年問題より深刻で、理由としては上記UNIX時間のシステム制限値(2,147,483,647秒)を超えてしまうことです。 つまり、1970年1月1日からの秒数が2,147,483,647を超える日が2038年1月19日3時14分7秒(日本では2038年1月19日12時14分7秒)ということです。これは現在の多くのコンピュータの値を扱う部分の上限値LONG型の最大値で2,147,483,647を超えると負数となります。 ただし、64bit-Timeを使用している場合は9,223,372,036,854,775,807秒で西暦3,000億年まで使用可能です。
#考察 #コンピューター #科学
●期間:4月6日→4月14日 ●桜ライトアップ:期間中の土日、日没〜21時 ●スタンプラリー:期間中300名様に記念品贈呈 ●各会場付近に無料駐車場あり 勝山観光協会/浅間神社/富士ビューホテル お問合せ:0555-83-2399(神社まで)
スタンプラリー 以下に3ヶ所のスタンプを押して「道の駅かつやま」または「冨士御室浅間神社」にご提示ください。プレゼントを差し上げます(期間中300名様)。
道の駅かつやま:道の駅前には湖に面した広大な芝生公園があり人気です。 富士ビューホテル:庭職人に管理された日本有数の庭内に桜の木があります。 冨士御室浅間神社:パワースポットとしても有名な世界遺産神社の御朱印 期間限定桜バージョンあります(300円)。 さくや愛の鐘:恋人同士で鐘を奏でると願いが成就すると言われています。 かつやま湖畔周遊路:勝山湖畔周辺遊路は、風光明媚なパワースポットとして有名です。
Katsuyama Sakura Festival 2019 4.6 -> 4.14 Sakura illumination is from sunset to 21:00 on the weekend. Stamp Rally:Prizes are awarded to the first three hundred arrivals.
4月23日(火) 会場:河口湖「富士レークホテル」1階ラウンジ 開場:12時30分 開演:13時 終演:14時30分 料金:完全予約制(ドリンクお替り自由・ケーキ付) 予約4500円 当日5000円 Vo.紅ともこ Pf.梅里桃太郎 主催:富士五湖ドットTV 場所:山梨県南都留郡富士河口湖町船津1番地 www.fujilake/co.jp ご予約 紅ともこ 090-8929-4893 富士五湖ドットTV 園田 090-6013-0960
息抜きでネット徘徊していたら面白いページを見つけた。http://hi.cs.waseda.ac.jp/~iizuka/projects/colorization/ja/ 簡単に言えば、白黒画像を深層階層処理でカラー化するシステムを公開しているということです。 最近デープなんとかは人工知能でも話題になっていますが、その性質上メモリを大量消費することがネックです。
で、さっそくどんなものかと思い公開されているシステム(unixベース)を手元のMac(Macもunixベース) で動作するようにしてみました。
とりあえず3,000pix程度の白黒画像をカラー化してみたら10G以上のメモリ消費、認識モデルとしては 自然(空|水|樹木)>人物(顔)>(建物)の順で良い結果が得られた。 上記URLにもサンプルがあるけど、私の導入した学習レベルファイルではサンプルほど綺麗にカラー化できなかった?画像を一瞬で判断できる人間はやはり凄いです。 しかし従来なら画像ソフトで時間をかけてカラー化していましたが、古い画像を機械処理で色が付けられるということは画期的であり、バッチがあれば自動化できます。 参考までにMacで処理した古い画像に色付けした画像を公開します。 元画像は、富士レークホテル、一品堂書店、旧勝山および小佐野家、永寿電気、の皆様に以前お借りした画像を用いました。 おもしろい昔の白黒画像をお持ちの方は是非協力してください。 ちなみに、動画をバッチでカラー化の計画しましたが疲れました。
#コンピューター #考察 #人工知能