293_Azure、Face API、顔検証をやってみる、、でも不完全

Azure、Face API、顔検証をやってみる
https://azure.microsoft.com/ja-jp/services/cognitive-services/face/
1.まず俺の写真3枚準備
2.では、まずWebそのまま利用で行きましょう。
(図1)

あれ、いきなり同一人物、、、だと。

3.では、データは良しとして、PHPでやってみるか。
https://westcentralus.dev.cognitive.microsoft.com/docs/services/563879b61984550e40cbbe8d/operations/563879b61984550f30395236
まずは、test_consoleで。
Keyは、取り直し
(図2)

(図3)
30日だけ利用可能なのね。。
保管場所は、
http://153.126.154.106/photo_check_20170731/files/

http://153.126.154.106/photo_check_20170731/files/IMG_15875604182662.jpeg
http://153.126.154.106/photo_check_20170731/files/1448158857484.jpg
http://153.126.154.106/photo_check_20170731/files/20110826oresama.JPG
(図4)

まあ、なんか出たけど(北京でのビール片手)。。。2枚の比較ではないなあ・・・

Pragma: no-cache
apim-request-id: e0dc48de-9307-4c7e-9265-b397fb1c56dc
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
x-content-type-options: nosniff
Cache-Control: no-cache
Date: Mon, 31 Jul 2017 12:38:30 GMT
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Content-Length: 1329
Content-Type: application/json; charset=utf-8
Expires: -1
[
  {
    “faceId”: “6d53a149-8c7e-4653-bbb8-1d616e6e47f3”,
    “faceRectangle”: {
      “top”: 151,
      “left”: 863,
      “width”: 406,
      “height”: 406
    },
    “faceLandmarks”: {
      “pupilLeft”: {
        “x”: 980.8,
        “y”: 254.3
      },
      “pupilRight”: {
        “x”: 1154.7,
        “y”: 261.1
      },
      “noseTip”: {
        “x”: 1058.6,
        “y”: 370.2
      },
      “mouthLeft”: {
        “x”: 993.0,
        “y”: 452.8
      },
      “mouthRight”: {
        “x”: 1142.6,
        “y”: 455.2
      },
      “eyebrowLeftOuter”: {
        “x”: 920.5,
        “y”: 219.1
      },
      “eyebrowLeftInner”: {
        “x”: 1030.2,
        “y”: 216.0
      },
      “eyeLeftOuter”: {
        “x”: 953.8,
        “y”: 257.4
      },
      “eyeLeftTop”: {
        “x”: 979.6,
        “y”: 244.6
      },
      “eyeLeftBottom”: {
        “x”: 977.9,
        “y”: 266.2
      },
      “eyeLeftInner”: {
        “x”: 1002.6,
        “y”: 259.1
      },
      “eyebrowRightInner”: {
        “x”: 1089.5,
        “y”: 221.5
      },
      “eyebrowRightOuter”: {
        “x”: 1218.4,
        “y”: 224.0
      },
      “eyeRightInner”: {
        “x”: 1129.3,
        “y”: 265.1
      },
      “eyeRightTop”: {
        “x”: 1155.0,
        “y”: 250.2
      },
      “eyeRightBottom”: {
        “x”: 1154.4,
        “y”: 274.1
      },
      “eyeRightOuter”: {
        “x”: 1179.9,
        “y”: 264.2
      },
      “noseRootLeft”: {
        “x”: 1045.6,
        “y”: 267.7
      },
      “noseRootRight”: {
        “x”: 1085.5,
        “y”: 269.2
      },
      “noseLeftAlarTop”: {
        “x”: 1028.8,
        “y”: 334.3
      },
      “noseRightAlarTop”: {
        “x”: 1099.8,
        “y”: 336.9
      },
      “noseLeftAlarOutTip”: {
        “x”: 1005.2,
        “y”: 370.7
      },
      “noseRightAlarOutTip”: {
        “x”: 1123.9,
        “y”: 376.6
      },
      “upperLipTop”: {
        “x”: 1061.1,
        “y”: 435.9
      },
      “upperLipBottom”: {
        “x”: 1061.5,
        “y”: 451.6
      },
      “underLipTop”: {
        “x”: 1060.8,
        “y”: 458.3
      },
      “underLipBottom”: {
        “x”: 1060.2,
        “y”: 475.9
      }
    },
    “faceAttributes”: {
      “emotion”: {
        “anger”: 0.0,
        “contempt”: 0.001,
        “disgust”: 0.0,
        “fear”: 0.0,
        “happiness”: 0.123,
        “neutral”: 0.876,
        “sadness”: 0.0,
        “surprise”: 0.0
      }
    }
  }
]
Face List IDとやらが必要なので作れと。
https://westcentralus.dev.cognitive.microsoft.com/docs/services/563879b61984550e40cbbe8d/operations/563879b61984550f3039524b/console
これも一応結果出たけど・・
Pragma: no-cache
apim-request-id: f7a884b5-110d-4748-b603-2794c9a9d7d5
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
x-content-type-options: nosniff
Cache-Control: no-cache
Date: Mon, 31 Jul 2017 12:47:03 GMT
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Content-Length: 0
Expires: -1
pythonでやってみるか、、、せっかくなんで。。。similarはサンプルコード無いみたいだな・・・残念。。
*********************************
ここからPython2.7 のコード
*********************************
import httplib, urllib, base64, json
###############################################
#### Update or verify the following values. ###
###############################################
# Replace the subscription_key string value with your valid subscription key.
subscription_key = ’13hc77781f7e4b19b5fcdd72a8df7156′
# Replace or verify the region.
#
# You must use the same region in your REST API call as you used to obtain your subscription keys.
# For example, if you obtained your subscription keys from the westus region, replace
# “westcentralus” in the URI below with “westus”.
#
# NOTE: Free trial subscription keys are generated in the westcentralus region, so if you are using
# a free trial subscription key, you should not need to change this region.
uri_base = ‘westcentralus.api.cognitive.microsoft.com’
# Request headers.
headers = {
‘Content-Type’: ‘application/json’,
‘Ocp-Apim-Subscription-Key’: 91723b068b294bb7b1e78d8ba36914b9,
}
# Request parameters.
params = urllib.urlencode({
‘returnFaceId’: ‘true’,
‘returnFaceLandmarks’: ‘false’,
‘returnFaceAttributes’: ‘age,gender,headPose,smile,facialHair,glasses,emotion,hair,makeup,occlusion,accessories,blur,exposure,noise’,
})
# The URL of a JPEG image to analyze.
body = “{‘url’:’http://153.126.154.106/photo_check_20170731/files/20110826oresama.JPG’}”
try:
# Execute the REST API call and get the response.
conn = httplib.HTTPSConnection(‘westcentralus.api.cognitive.microsoft.com’)
conn.request(“POST”, “/face/v1.0/detect?%s” % params, body, headers)
response = conn.getresponse()
data = response.read()
    # ‘data’ contains the JSON data. The following formats the JSON data for display.
parsed = json.loads(data)
print (“Response:”)
print (json.dumps(parsed, sort_keys=True, indent=2))
conn.close()
except Exception as e:
print(“[Errno {0}] {1}”.format(e.errno, e.strerror))
*********************************
ここまでPython2.7 のコード
*********************************

*********************************
ここからResponse結果
*********************************
Response:
[
{
“faceAttributes”: {
“accessories”: [],
“age”: 34.9,
“blur”: {
“blurLevel”: “high”,
“value”: 0.98
},
“emotion”: {
“anger”: 0.0,
“contempt”: 0.001,
“disgust”: 0.0,
“fear”: 0.0,
“happiness”: 0.123,
“neutral”: 0.876,
“sadness”: 0.0,
“surprise”: 0.0
},
“exposure”: {
“exposureLevel”: “goodExposure”,
“value”: 0.59
},
“facialHair”: {
“beard”: 0.4,
“moustache”: 0.1,
“sideburns”: 0.2
},
“gender”: “male”,
“glasses”: “NoGlasses”,
“hair”: {
“bald”: 0.02,
“hairColor”: [
{
“color”: “brown”,
“confidence”: 1.0
},
{
“color”: “black”,
“confidence”: 0.76
},
{
“color”: “gray”,
“confidence”: 0.29
},
{
“color”: “other”,
“confidence”: 0.18
},
{
“color”: “blond”,
“confidence”: 0.09
},
{
“color”: “red”,
“confidence”: 0.07
}
],
“invisible”: false
},
“headPose”: {
“pitch”: 0.0,
“roll”: 1.2,
“yaw”: -6.3
},
“makeup”: {
“eyeMakeup”: false,
“lipMakeup”: true
},
“noise”: {
“noiseLevel”: “medium”,
“value”: 0.61
},
“occlusion”: {
“eyeOccluded”: false,
“foreheadOccluded”: false,
“mouthOccluded”: false
},
“smile”: 0.123
},
“faceId”: “3509””3-608a-4165-be27-b9e9″”””””2f7″,
“faceRectangle”: {
“height”: 406,
“left”: 863,
“top”: 151,
“width”: 406
}
}*********************************
ここまで結果
*********************************
うーーーん、まあ同じ結果出たけど、、、ね。。。。。
***********************
Face API
***********************
写真に含まれる顔の検出、識別、分析、グループ化、タグ付け
30,000 トランザクション (1 分あたり 20 回)。
エンドポイント: https://westcentralus.api.cognitive.microsoft.com/face/v1.0
キー 1: 917*******************6914b9
キー 2: 192**********************2105ae
***********************
Emotion API
***********************
感情認識を使用してエクスペリエンスをパーソナライズする
30,000 トランザクション (1 分あたり 20 回)。
エンドポイント: https://westus.api.cognitive.microsoft.com/emotion/v1.0
キー 1: 2998″”””””””””””””””””””””””””””1866
キー 2: 229c””””””””””””””””””””””””””””3a093b

292_Microsoft Cognitive Servicesで人工知能を体験・でもまだNG

sakuravps2で再トライ。
sakuravpsで入ります。su -でルートにもなれるし。
まずは、作成したファイル群のコピーから。
FFFTPでdasudasu.sakura.ne.jpから、フォルダ毎Win10へコピー
その後、Filezillaでファイル群をuploadしてみる
おお!やりました!できました。
テストWebよりアクセス。
http://153.126.154.106/php_emotion_20170728/20170728photo.html
20110826oresama.JPGをアップロードしました。
OK!ファイルのアップロードまでは行きました!
http://153.126.154.106/php_emotion_20170728/20170728test1.php
http://153.126.154.106/php_emotion_20170728/20170729_test1.php
http://153.126.154.106/php_emotion_20170728/20170730_test1.php
http://153.126.154.106/php_emotion_20170728/20170730_test2.php
うーーん。
HTTP 500 エラー
申し訳ありません。Web サイトはこのページを表示できません
かあ・・・・
PHPのコード見てもHTTP/Request2.php
を使ってるから、それを生かすにはPEARがいるみたい。(=見に行ってるようだ)
https://docs.microsoft.com/ja-jp/azure/cognitive-services/emotion/quickstarts/php
やっぱりPEARをインストールしてみるか・・
ちなみにデモやったら、Nuetoralだと。それなりの評価
(図1)
PEAR本体のインストール
http://linuxserver.jp/%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%9f%e3%83%b3%e3%82%b0/php/pear/pear%e3%81%ae%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab#PEAR-2
# yum -y install php-pear
でできたみたい・・・
# pear
# pear list
# pear version
でなんかいろいろ出てくるので。。。
wget http://download.pear.php.net/package/HTTP_Request2-2.3.0.tgz
wget http://download.pear.php.net/package/Net_URL2-2.1.2.tgz
tar zxvf xxxxコマンドで解凍
tar zxvf HTTP_Request2-2.3.0.tgz
tar zxvf Net_URL2-2.1.2.tgz
写真のありかは、
http://153.126.154.106/php_emotion_20170728/files/20110826oresama.JPG
http://153.126.154.106/php_emotion_20170728/files/20100501吉原家.JPG
20170728test1.php
PEARからコマンドでHTTP_Requestとかインストールしてみる。
pear channel-update pear.php.net
pear install Net_URL2-2.2.0
pear install HTTP_Request2-2.3.0
pear install HTTP_OAuth-0.2.3   (これはやんなかった)
■ちなみに、
https://dev.projectoxford.ai/docs/services/5639d931ca73072154c1ce89/operations/563b31ea778daf121cc3a5fa/console

open API testing console
では、うまく行ってる?みたいだから、PHPのコード記述が間違ってるのか?と。
下記で、送ってうまく表示できているようなので。
———————————————
POST https://westus.api.cognitive.microsoft.com/emotion/v1.0/recognize HTTP/1.1
Host: westus.api.cognitive.microsoft.com
Content-Type: application/json
Ocp-Apim-Subscription-Key: 29985767867e48d7b5070f58be141866
{ “url”: “http://153.126.154.106/php_emotion_20170728/files/20110826oresama.JPG” }
———————————————
(図2)
■うーーん。
http://d.hatena.ne.jp/golden-eggs/20080723/1216812792
に聞くと、、、
どうやら、PEARちゃんは、
# pear config-get php_dir
で調べると
/usr/share/pear
にインストールされとる?
これを書かないといけないのでは???
//パスを通してインクルード
$path = dirname(__FILE__).”/php_emotion_20170728″;
set_include_path(get_include_path().PATH_SEPARATOR.$path);
も追加
fileコマンドを使えばUTF-8のBOMの有無や改行コードがCRLFかどうかがチェックできる
で調べると、
find . -type f -name “201707*.*” | xargs file
■UTF-8でないの原因か??
[root@ik1-313-16602 php_emotion_20170728]# find . -type f -name “201707*.*” | xargs file
./20170729_test1.php:   PHP script text
./20170728test1.php:    PHP script text
./20170728_upload.php2: UTF-8 Unicode C++ program text
./20170728photo.html:   HTML document text
./20170728_upload.php:  HTML document text
./20170728_upload.php1: HTML document text
では、これで変換を
$ iconv -f EUCJP -t UTF8 20170729_test1.php > 20170729_test2.php
■ヘッダにこれを書くか?
<html>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″ />
<title>sample</title>
</head>
<body>
<p>
■JavaScriptでやってみる
https://docs.microsoft.com/ja-jp/azure/cognitive-services/emotion/quickstarts/javascript
http://153.126.154.106/php_emotion_20170728/20170730_js.html
“success”ってサイトからのメッセージだけ??出たけど・・・・・
■pythonでやってみる
http://153.126.154.106/php_emotion_20170728/20170730_emo.py
# python 20170730_emo.py
で結果がコマンドラインでは返ってきた・・・・
[root@ik1-313-16602 php_emotion_20170728]# python 20170730_emo.py
[{“faceRectangle”:{“height”:406,”left”:863,”top”:151,”width”:406},”scores”:{“anger”:9.52410346E-07,”contempt”:0.000829975063,”disgust”:7.344764E-07,”fear”:2.54277044E-10,”happiness”:0.1160154,”neutral”:0.8831446,”sadness”:7.53089944E-06,”surprise”:7.734229E-07}}]
■共用サーバでできるかな???
URLは、
http://dasudasu.sakura.ne.jp/php_emotion_20170728/20170730_test1.php
写真は、
http://dasudasu.sakura.ne.jp/php_emotion_20170728/files/20110826oresama.JPG
Fatal error: Class ‘PEAR_Exception’ not found in /home/dasudasu/www/php_emotion_20170728/HTTP/Request2/Exception.php on line 45
やっぱ、PEARが無いって言われる・・・・
★★★★★★★★★★★ここから★★★★★★★★★★★★
Prerequisite
Get your free Subscription Key here
https://azure.microsoft.com/en-us/try/cognitive-services/
Emotion API PREVIEW
Emotion API PREVIEW
This API key is currently active
30 days remaining
Personalize experiences with emotion recognition
30,000 transactions, 20 per minute.
Endpoint: https://westus.api.cognitive.microsoft.com/emotion/v1.0
Key 1: 299*******************************e141866
Key 2: 229*******************************b3a093b

291_Microsoft Cognitive Servicesで人工知能を体験・でもNG

Microsoft Cognitive Servicesで人工知能を体験

Microsoft Cognitive Servicesで人工知能を体験しよう!(Emotion API編)


を参考

APIの使い方は今回も、GitHubに既に公開されてあるCogniteive Service関連のSDKとサンプルのリポジトリを使いたいと思います。。。と。
https://github.com/Microsoft/ProjectOxford-ClientSDK
リポジトリの中にEmotionAPI-WPF-SamplesというVisual Studioのソリューションがあるのでそれをビルドして実行すればサンプルアプリケーションを利用可能になります。
で、VSは使いづらいので、、
下記、PHPをソースを使って、
GoogleVisionでやったようにサーバ画像フォルダ/ファイルを指定すれば
Azureでの感情表現API/AIが作れるかも?と。
Emotion API PHP Quick Start
https://docs.microsoft.com/ja-jp/azure/cognitive-services/emotion/quickstarts/php
にコードがあるのでそれを使ってみる。
【194】を参考
http://dasudasu.sakura.ne.jp/php_emotion_20170728/20170728photo.html
ソースは、
ーーーーーーーーーーーーーーーーーーーーー
<html>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″ />
<title>sample</title>
</head>
<body>
<form action=”20170318_upload.php” method=”post” enctype=”multipart/form-data”>
emotionファイル:<br />
<input type=”file” name=”upfile” size=”40″ /><br />
<br />
<input type=”submit” value=”emotion file アップロード” />
</form>
</body>
</html>
ーーーーーーーーーーーーーーーーーーーーー
で、まずWeb表示はOK!
【195】を参考
フォームから送信されたデータを受け取るPHPプログラムを作成、、か。。
アップロードされたファイルの情報は $_FILES に格納。。。と。
前に挙げたサンプルフォームからファイルを受け取る場合、form.html と同じフォルダに
20170728_upload.php (form の action で指定したファイル。)を作成し、以下の内容を記述します。。。と。
コードは、
=============
<html>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″ />
<title>sample</title>
</head>
<body>
<p><?php
if (is_uploaded_file($_FILES[“upfile”][“tmp_name”])) {
if (move_uploaded_file($_FILES[“upfile”][“tmp_name”], “files/” . $_FILES[“upfile”][“name”])) {
chmod(“files/” . $_FILES[“upfile”][“name”], 0644);
echo $_FILES[“upfile”][“name”] . “をアップロードしました。”;
} else {
echo “ファイルをアップロードできません。”;
}
} else {
echo “ファイルが選択されていません。”;
}
?></p>
</body>
</html>
=============
で、同じ場所に files フォルダを作成し、書き込み権限を与えておきます、、、か。
・・・・
試すと、、、
WIN_20160102_13_24_12_Pro.jpgをアップロードしました。
よしっと!
【197】を参考
■PHPでAzureでの感情表現APIにリクエスト
ここからは、サンプルプログラムにいきなり。
ズルく行きます。
はい、だめ。。。
見ると、、 Apache HTTP client from HTTP Components を使うと書いているのでそれをDLしてみる。
場所は、
http://hc.apache.org/downloads.cgi
から。
で、結局わからんので、もっと優しいところ探して
https://developer.cybozu.io/hc/ja/articles/202657614-HTTP-Request2%E3%82%92%E5%88%A9%E7%94%A8%E3%81%97%E3%81%9Fkintone-REST-API%E3%81%AE%E6%89%B1%E3%81%84%E6%96%B9?mobile_site=true
HTTP/Request2.phpインストール
を参考にやってみます。
HTTP_Request2のインストール方法は、http://pear.php.net/package/HTTP_Request2/downloadを参照してください。
なので、ここへ。
http://pear.php.net/package/HTTP_Request2/download
でも、、、古いけど
PEARをインストールしないでHTTP_Request2を使う方法
が私のレベルには優しそうなので。こっちをやってみる。★★
http://absg.hatenablog.com/entry/2014/10/24/180338
①HTTP_Request2を入手する
以下のページから取ってくる。
http://pear.php.net/package/HTTP_Request2/download
②Net_URL2を入手する
以下のページから取ってくる。
http://pear.php.net/package/Net_URL2/download
③自分のサーバにファイルを展開する
取ってきたHTTP_Request2とNet_URL2のファイルを自分のサーバに展開する。
④ディレクトリを移動する
HTTP_Request2の「HTTP」ディレクトリを自前の「hoge」ディレクトリ下に移動する。
また、Net_URL2「Net」ディレクトリを自前の「hoge」ディレクトリ下に移動する。
(↓こんな感じにする)
php_emotion_20170728

├─HTTP
│  ├─Request2.php
│  └─Request2

└─Net
└─URL2.php
http://download.pear.php.net/package/HTTP_Request2-2.3.0.tgz
http://download.pear.php.net/package/Net_URL2-2.1.2.tgz
tar zxvf xxxxコマンドで解凍できる。
Filezillaでsakuravps2で解凍したファイルを一度Win10にDL
その後、FFFTPでdasudasu.sakura.ne.jpへ転送でやりました。
⑤php内でインクルードする
phpでインクルードするときに以下のようにパスを通しておく。
これでHTTP_Request2が使えるようになる
コード内に
//パスを通してインクルード
$path = dirname(__FILE__).”/hoge”;
set_include_path(get_include_path().PATH_SEPARATOR.$path);
require_once(“HTTP/Request2.php”);
を書いておく、、、と。
でもダメ、PEARを見てるようなので。
PEARもインストールしてみるか・・・どうやんだろう??
Warning: require_once(PEAR/Exception.php): failed to open stream: No such file or directory in /home/dasudasu/www/php_emotion_20170728/HTTP/Request2/Exception.php on line 25
Fatal error: require_once(): Failed opening required ‘PEAR/Exception.php’ (include_path=’.:/home/dasudasu/www/google-api-php-client/src:/home/dasudasu/www/php_emotion_20170728/php_emotion_20170728′) in /home/dasudasu/www/php_emotion_20170728/HTTP/Request2/Exception.php on line 25
なので、sakuravps2のレンタルサーバで再トライしてみます。

290_facebook_&_api.aiを試す_でも途中まで

facebookとapi.aiを連携してみる
http://qiita.com/naoyashiga/items/6c663f6e773490934312
を参考
■事前準備
herokuのアカウント登録
id:h*******@yahoo.**.**
pass:A*******
■Api.aiを使う
https://api.ai/
(図1)

(図2)
うーんこれは使わない。。。。
■botを作るためには、Facebookアプリ登録&Facebookページ作成が必要になります。
Facebookアプリ登録&Facebookページ作成
https://developers.facebook.com/quickstarts/?platform=web
「20170717_yoshi」でページ作成
(図3)

(図4)

■APPのダッシュボードが生成
(図5)
2017­0­7­1­7­_­y­oshi
190**********21303
f439f**********91bcd**********b41327
(図6)
■トークン作成

(図7)

(図8)
EAA**********AAWTgPWXH**********XvN7ydLeYYjK6**********I8B1UK*********************kTl**********Q42X494ufK**********Cp95d7CQTA**********SYoEzD
(図9)
■Agent作成
こちらから新規Agentを作成。
https://console.api.ai/api-client/#/newAgent
■Facebook Messengerと結びつける
https://api.ai/
https://api.ai/docs/integrations/facebook
作業手順
Integrationsタブをクリック
Enable SwitchボタンをONにする
Deploy Herokuボタンを押す(Heroku Free Planではアプリケーションを5個までしか作成できない。5個作成している方は既存のものを1つ削除する必要があるので注意。)
Saveボタンを押して保存
(図10)
いろいろ出来るUI
(図11)
■Heroku Appの設定
・・・とここまで。
最大の5つにAPPがリーチしたので作成できないと。。
そんなに作ったっけ??
なので、ここまで。
まあ、yoshiyoshi商店だけ作れたのでイメージは分かったかな???
以上

289_api.aiを試す_try_it_「ラーメンメニュー」★

API.AIを使ってみる
http://qiita.com/flatfisher/items/76bc86b65e5f2150a1a0
を参考
API.AIの登録
API.AIでサインアップ
https://api.ai/
h.yoshihara1204@gmail.comで登録
Create new agentをクリック
以下の内容で保存します
– Agent name:ラーメン2
– Agent type:Public
– DESCRIPTION:これはラーメン屋のプロジェクトです(2017/07/16)
– LANGUAGE:日本語
– DEFAULT TIME ZONE:(GMT+9:00) Asia/Tokyo
Entitiesを作成する
Entities名にRamenMenuと入れます。
Intentsの作成
Intent nameにOrderと入れます。
Action にorderといれます。
User says に「RamenMenuをお願いします。」と入力
最後にText responseに「かしこまりました。」と登録します。
話しかける
右のテキストバーから、テキストもしくは音声で「味噌ラーメンをお願いします。」と入力してください。

287_swp(スワップファイル)を削除する

swp(スワップファイル)を削除する
ファイルが壊れたりして、途中保存の.swpファイルがあるらしい。
これ$ ls -lで見ても表示されない・・
だけど普通のrmコマンドで消せる、と。
http://www.php-mysql-linux.com/linux/swp-delete/
を参考。。。
発生の原因は、、、
(1)は他のプログラムが同じファイルを編集している可能性あり。
(2)はファイルが壊れていてスワップファイルが存在する場合。
らしい。。。
スワップファイルは下記のように消せます。
rm .20170622_og_d_list.php.swp
(はい、消せました!!!)
以上

286_<無事故管理Web>過去最大日数テーブル_OK!★

max_infというテーブルを作成し、最大値を格納するようにしました。
これで年間最大で何日まで行ったか?履歴がわかります。
うまく動くんかな????
まあ様子見。。。。
================================
<★1>
// 過去最大日数を表示します20170702(ここ)個別***********↓上
    $sql3 = “SELECT * from max_inf WHERE max_service like $search_key1 “;
$result3 = $pdo->query($sql3);
     While($row3 = $result3->fetch()) {
print “<font color=’black’ size=4 >過去最大値: “;
//print “<font color=’blue’ size=4 >” .$search_key1.”=”. $row3[3].” 日!”.$row3[4].”<BR>”;
print “<font color=’blue’ size=4 >” .$search_key1.”=”. $row3[3].” 日! “;
print “<font color=’black’ size=4 >(発覚日: “;
print “<font color=’blue’ size=4 >” .$row3[4].”の案件)<BR>”;
}
print “<BR><BR>”;
// 過去最大日数を表示します20170702(ここ)個別***********↑下
<★2>
// 過去最大テーブルへのカウントupdate 20170702*****↓上
    $sql2 = “SELECT DATEDIFF(now(), (select max(tr_date) from tbl_t WHERE tr_service like $search_key1 ))”;
・・・・

$sql22 = “SELECT max(tr_date) from tbl_t WHERE tr_service like $search_key1 “;

$result22 = $pdo->query($sql22);
While($row22 = $result22->fetch()) {
//print “<font color=’blue’ size=5 >” . $search_key1 . “の*******数は、” . $row[0] . “日です。<BR>”;
}

// 過去最大テーブルへのカウントupdate 20170702*****↓中
$sql31 = “SELECT max_service,max_date from max_inf WHERE max_service like $search_key1”;
$result31 = $pdo->query($sql31);

// UPDATE文を変数に格納
$sql = “UPDATE cities SET name = :name WHERE id = :id”;
$sqlu = “UPDATE  max_inf
SET
max_date   = :r,
hakkaku_date  = :r22
WHERE max_service = $search_key1”;

// 更新する値と該当のIDは空のまま、SQL実行の準備をする
$stmhu = $pdo->prepare($sqlu);

// 更新する値と該当のIDを配列に格納する
$params = array(‘:r’ => $r, ‘:r22’ => $r22);

// 更新する値と該当のIDが入った変数をexecuteにセットしてSQLを実行
$stmhu->execute($params);

// 更新完了のメッセージ
echo ‘更新完了しました’;

  }
// 過去最大テーブルへのカウントupdate 20170702*****↑下
<★3>
// 過去最大日数を表示します20170702(ここ)全体***********↓上
    $sql3 = “SELECT max_service,max_date from max_inf “;
$result3 = $pdo->query($sql3);
     While($row3 = $result3->fetch()) {
print “<font color=’black’ size=4 >過去最大値: “;
print “<font color=’blue’ size=4 >” .$row3[0].” = “. $row3[1].” 日 <BR> “;
}
     print “<BR><BR>”;
// 過去最大日数を表示します20170702(ここ)全体***********↑下
/////////以下メモ(生コード)//////////
<?php
session_start();
?>
<HTML>
<HEAD>
<TITLE>PHP+MySQL:連続無事故日数管理Web</TITLE>
</HEAD>
<BODY>
<HR size=”1″ noshade>
<font size=6 >
ボイスSO<連続無事故日数管理Web>
<BR>
on sakuravps2 !!
<BR>
</font>
<HR size=”1″ noshade>
<BR>
<font color=’green’ size=4 >
[ <a href=”20170621_form.html”>入れたくないけど・・「SOトラブルの新規登録」はここから</a>]
</font>
<BR>
<BR>
<FORM name=”form1″ method=”post” action=”20170622_og_d_list.php”>
<font color=’green’ size=5 >
サービス絞り込み:<select name=”search_key”>
<option value=””selected>全部(高度CC/ひかり/IPVoice/光コラボ)</option>
<option value=”高度CC”>高度CC</option>
<option value=”ひかりライン”>ひかりライン</option>
<option value=”IPVoice”>IPVoice</option>
<option value=”光コラボ”>光コラボ</option>
</select>
<INPUT type=”submit” value=”絞り込む”>
</font>
<BR>
<BR>
</FORM>
<?php
require_once(“20170621_trDB.php”);
$pdo = db_connect();
// 削除処理
if(isset($_GET[‘action’]) && $_GET[‘action’] == ‘delete’ && $_GET[‘id’] > 0 ){
try {
$pdo->beginTransaction();
$id = $_GET[‘id’];
$sql = “DELETE FROM tbl_t WHERE tr_Num = :id”;
$stmh = $pdo->prepare($sql);
$stmh->bindValue(‘:id’, $id, PDO::PARAM_INT );
$stmh->execute();
$pdo->commit();
print “データを” . $stmh->rowCount() . “件、削除しました。<br>”;
    } catch (PDOException $Exception) {
$pdo->rollBack();
print “エラー:” . $Exception->getMessage();
}
}
// 挿入処理
if(isset($_POST[‘action’]) && $_POST[‘action’] == ‘insert’){
try {
$pdo->beginTransaction();
$sql = “INSERT  INTO tbl_t (tr_date, tr_service, tr_contents) VALUES ( :hakkaku_date, :service_name, :naiyou )”;
$stmh = $pdo->prepare($sql);
$stmh->bindValue(‘:tr_date’,  $_POST[‘hakkaku_date’],  PDO::PARAM_STR );
$stmh->bindValue(‘:tr_service’, $_POST[‘service_name’], PDO::PARAM_STR );
$stmh->bindValue(‘:tr_contents’,        $_POST[‘naiyou’],        PDO::PARAM_STR );
$stmh->execute();
$pdo->commit();
print “データを” . $stmh->rowCount() . “件、挿入しました。<br>”;
    } catch (PDOException $Exception) {
$pdo->rollBack();
print “エラー:” . $Exception->getMessage();
}

}

// 更新処理
if(isset($_POST[‘action’]) && $_POST[‘action’] == ‘update’){
// セッション変数よりidを受け取ります
$id = $_SESSION[‘id’];
    try {
$pdo->beginTransaction();
$sql = “UPDATE  tbl_t
SET
                  tr_service   = :service_name,
tr_contents  = :naiyou
WHERE tr_Num = :id”;
$stmh = $pdo->prepare($sql);
//print $sql;  //これはチェックのために追加(2015/09/05)
//print $id;  //これはチェックのために追加(2015/09/05)
      $stmh->bindValue(‘:service_name’, $_POST[‘service_name’],  PDO::PARAM_STR );
$stmh->bindValue(‘:naiyou’,       $_POST[‘naiyou’],        PDO::PARAM_STR );
$stmh->bindValue(‘:id’,           $id,                     PDO::PARAM_INT );
//print $sql;  //これはチェックのために追加(2015/09/05)
      $stmh->execute();
$pdo->commit();
//print “データを” . $stmh->rowCount() . “件、更新しました。<br>”;
    } catch (PDOException $Exception) {
      $pdo->rollBack();
print “エラー:” . $Exception->getMessage();
}
// 使用したセッション変数を削除する
unset($_SESSION[‘id’]);
}
// 検索および現在の全データを表示します
try {
if(isset($_POST[‘search_key’]) && $_POST[‘search_key’] != “”){
$search_key = ‘%’ . $_POST[‘search_key’] . ‘%’;
$search_key1 ='”‘ . $_POST[‘search_key’] . ‘”‘;
    $sql= “SELECT * FROM tbl_t WHERE tr_service like :tr_service order by tr_date DESC”;
$stmh = $pdo->prepare($sql);
    $sql2 = “SELECT DATEDIFF(now(), (select max(tr_date) from tbl_t WHERE tr_service like $search_key1 ))”;
$sql22 = “SELECT max(tr_date) from tbl_t WHERE tr_service like $search_key1 “;
$result22 = $pdo->query($sql22);
While($row22 = $result22->fetch()) {
//     print “<font color=’blue’ size=5 >” . $search_key1 . “のupdate日付は、” . $row22[0] . “日です。<BR>”;
     $r22 = $row22[0];
}
// 過去最大日数を表示します20170702(ここ)個別***********
    $sql3 = “SELECT * from max_inf WHERE max_service like $search_key1 “;
$result3 = $pdo->query($sql3);
     While($row3 = $result3->fetch()) {
print “<font color=’black’ size=4 >過去最大値: “;
print “<font color=’blue’ size=4 >” .$search_key1.”=”. $row3[3].” 日! “;
print “<font color=’black’ size=4 >(発覚日: “;
print “<font color=’blue’ size=4 >” .$row3[4].”の案件)<BR>”;
}
print “<BR><BR>”;
// 過去最大日数を表示します20170702(ここ)個別***********
    $result = $pdo->query($sql2);
     While($row = $result->fetch()) {
print “<font color=’blue’ size=5 >” . $search_key1 . “の連続無事故日数は、” . $row[0] . “日です。<BR>”;
$r = $row[0];
}
// 過去最大テーブルへのカウントupdate 20170702*****↓中
$sql31 = “SELECT max_service,max_date from max_inf WHERE max_service like $search_key1”;
$result31 = $pdo->query($sql31);
     While($row31 = $result31->fetch()) {
$r31 = $row31[1];
}
//        print “<font color=’green’ size=4 >” .$search_key1.”===search_key1<BR>”;
//        print “<font color=’green’ size=4 >” .$r.”===new value<BR>”;
//        print “<font color=’green’ size=4 >” .$r31.”===past max value<BR>”;
//        print “<font color=’green’ size=4 >” .$r22.”===new date value<BR>”;
if($r>$r31){
// UPDATE文を変数に格納
$sqlu = “UPDATE  max_inf
SET
max_date   = :r,
hakkaku_date  = :r22
WHERE max_service = $search_key1”;
    // 更新する値と該当のIDは空のまま、SQL実行の準備をする
$stmhu = $pdo->prepare($sqlu);
    // 更新する値と該当のIDを配列に格納する
$params = array(‘:r’ => $r, ‘:r22’ => $r22);
    // 更新する値と該当のIDが入った変数をexecuteにセットしてSQLを実行
$stmhu->execute($params);
    // 更新完了のメッセージ
echo ‘★最新日数に更新完了しました’;
print “<BR>”;
///  print “<font color=’green’ size=4 >” .$sqlu.”===MySQL update command !!!!!<BR>”;
}else{
///          print “<font color=’green’ size=4 >”. “do not care !!!!!!<BR>”;
}
// 過去最大テーブルへのカウントupdate 20170702*****↑下
//    print “search_key1 =  ” . $search_key1;  //これはチェックのために追加(2015/09/05)
    $stmh->bindValue(‘:tr_service’,  $search_key, PDO::PARAM_STR );
//    $stmh->bindValue(‘:tr_contents’, $search_key, PDO::PARAM_STR );
    $stmh->execute();
  }else{
$sql= “SELECT * FROM tbl_t order by tr_date DESC “;
$stmh = $pdo->query($sql);
// 過去最大日数を表示します20170702(ここ)全体***********
    $sql3 = “SELECT max_service,max_date from max_inf “;
$result3 = $pdo->query($sql3);
     While($row3 = $result3->fetch()) {
print “<font color=’black’ size=4 >過去最大値: “;
print “<font color=’blue’ size=4 >” .$row3[0].” = “. $row3[1].” 日 <BR> “;
}
     print “<BR><BR>”;
// 過去最大日数を表示します20170702(ここ)全体***********
// 無事故日数を表示します(ここ)***************
     $str = $pdo->query(“SELECT DATEDIFF(now(), (select max(tr_date) from tbl_t)) FROM tbl_t “);
While($row = $str->fetch()) {
$aaa = $row[‘DATEDIFF(now(), (select max(tr_date) from tbl_t))’];
     }
    print “<font color=’red’ size=5 >今日までのところ、全体では<BR>”;
print “<font color=’red’ size=6 >連続無事故日数は【” . $aaa . “】日です!<BR>”;
// 無事故日数を表示します(ここ)***************
  }
    $count = $stmh->rowCount();
print “<font color=’blue’ size=4 >最近のSOトラブル件数は、下記” . $count . “件です。<BR>”;
} catch (PDOException $Exception) {
print “エラー:” . $Exception->getMessage();
}
if($count < 1){
print “検索結果がありません。<BR>”;
}else{
?>
<TABLE width=”600″ border=”1″  cellspacing=”0″ cellpadding=”8″>
<TBODY>
<TR><TH>発覚日</TH><TH>サービス</TH><TH>トラブル概要</TH><TH>&nbsp;</TH><TH>&nbsp;</TH></TR>
<?php
while ($row = $stmh->fetch(PDO::FETCH_ASSOC)) {
?>
<TR>
<TD><?=htmlspecialchars($row[‘tr_date’])?></TD>
<TD><?=htmlspecialchars($row[‘tr_service’])?></TD>
<TD align=”center”><?=htmlspecialchars($row[‘tr_contents’])?></TD>
<TD align=”center”><a href=20170621_updateform.php?id=<?=htmlspecialchars($row[‘tr_Num’])?>>更新</a></TD>
<TD align=”center”><a href=20170622_og_d_list.php?action=delete&id=<?=htmlspecialchars($row[‘tr_Num’])?>>削除</a></TD>
</TR>
<?php
}
?>
</TBODY></TABLE>
<?php
}
?>
</BODY>
<!–
<br />
<a href=”./20170622_og_d_list.php/”>戻る</a>
–>
</HTML>