Loading [MathJax]/extensions/tex2jax.js

2023-06-29

OBSで映像キャプチャデバイスが設定できない場合の対処法

 表題の通り、設定できないというか真っ白になって固まるという症状が起きたので、その解決メモ書き。結論から書くと、

  • 管理者権限で起動してみる
  • (上記でもだめなら)NVIDIAのドライバが悪さをしているので、522.25 または 517.48までダウングレードする
というのを試してみてください。私は後者で治りました。半年くらい前に同じ理由で固まってしまったのにそれを忘れて、調子に乗ってドライバのアップデートをしたのが敗因でした。つーか、いい加減このバグ直してほしいね。どっちの原因なんだ?

(追記) 下記記事で解消しました。


    2023-06-27

    MacでBluetoothマウスの調子が悪くなった場合の対処法

     表題の通り、MacにBluetooth接続しているマウスの動きが悪くなった場合は、

    • /Library/Preferences/com.apple.Bluetooth.plist を削除し、再起動

    で解決することがあります。お試しあれ。



    2023-06-19

    ChatGPT: 調整さんへ入力する日付を書いてもらう

    スケジュール調整に「調整さん」を利用することはよくありますが、日程を入れるのが面倒なときがあります。こういう面倒な作業は、ChatGPTにやらせましょう 

    プロンプト例)

    6月26日から7月1日の間で、日付(曜日)時間という日時フォーマットで文字列を出力してください。1行に1つの日時とします。時間帯は、17時から19時までの時間で30分ごとに用意してください。曜日は2023年のカレンダーに従ってください。また時間帯の後ろに「~」という文字を追加してください。

    出力

    6月26日(月曜日)17:00~
    6月26日(月曜日)17:30~
    6月26日(月曜日)18:00~
    6月26日(月曜日)18:30~
    6月26日(月曜日)19:00~
    6月27日(火曜日)17:00~
    6月27日(火曜日)17:30~
    6月27日(火曜日)18:00~
    6月27日(火曜日)18:30~
    6月27日(火曜日)19:00~
    6月28日(水曜日)17:00~
    6月28日(水曜日)17:30~
      (以下、略)



    2023-06-14

    GAS: GoogleSheet上の画像にスクリプトを動的に割り当てる(複数の画像を配置した場合)

    以下の過去記事に質問コメントがあったのでその回答記事になります。

    画像を複数用意した場合に、それぞれに異なるメソッドを割りあてる方法についてです。代替テキストを利用したら良いということを書きましたが、具体例を以下に書きます。

    今回のお題

    • 以下のように、シートに2つの画像を用意します
    • それぞれの画像をクリックすると、「モモだよ」「りすだよ」と表示します。







    代替テキストを割り当てる

    今回はタイトルに書いてみました。それぞれに、「momo」「risu」と書きました。








    実装コード

    下記のようになります。ポイントとしては、イメージを取ってきて、getAltTextTitleで画像のタイトルを取り出し、確認してメソッドを登録しているところになります。なお、assignScriptsToImages()を実行しないと、メソッドは登録されませんので、このメソッドをいつ呼び出すかについては、AppScriptのトリガーでシートの起動時にこのメソッドを呼び出すようにするのは一つの手でしょう。


    function assignScriptsToImages() {
    var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
    var images =sheet.getImages();
    for(var i=0;i<images.length;i++){
    switch(images[i].getAltTextTitle()){
    case "risu":
    images[i].assignScript("risuSay");
    break;
    case "momo":
    images[i].assignScript("momoSay");
    break;
    }
    }
    }
    function risuSay(){
    Browser.msgBox("りすだよ");
    }
    function momoSay(){
    Browser.msgBox("モモだよ");
    }


    2023-06-12

    Flaskでウェブサーバーを公開する際の注意点(app.run編)

     Flaskはそのフレームワーク自体がウェブサーバーの機能を持っているので、プログラムを実行するだけで、ウェブアプリとして公開されるという利点があります。しかし、他のマシンからWebアプリとして公開するには、app.runの記述に注意が必要です。

    設定すべき項目

    下記のように、runメソッドを実行するときに、host='0.0.0.0'を設定する必要があります。この設定をしないと、localhost以外からのアクセスできません。

    • app.run(host='0.0.0.0', port=5050)

    なお、上記のように実行時の環境情報をコード内にハードコーディングするのはあまり望ましい形ではありません。Flask-DotEnvというライブラリを利用することで、実行時の環境変数をアプリごとに設定できるようですので、それもありのようです。




    2023-06-06

    Windowsドメインアカウントで、VS Code Remote DevelopementのSSHログインする方法

    表題の件、ちょっとハマったのでメモ書き。

    前提条件

    おちラボでは、Windowsドメイン(Active Directory)で、ラボのPCアカウント管理をしています。ターミナルなどでこのアカウントを利用してWindowsの計算サーバーにSSHアクセスするには、

    • ochilab¥ユーザ名(例、ochilab¥ochi)

    というアカウント名でログインすることになります(まあこれはわかる話)。

    ドメイン表記が無視される?

    ところがVSCodeのRemote DevelopmentでSSHしようとした時に、SSH ConfigのファイルのUserの項目を上記の書き方をしたら、¥以前のところが無視されることが判明。

    具体的にいうと、「ochilab¥ユーザ名」のアカウントでSSHアクセスしたいのに、ドメインのところが消えちゃうので、ログインアカウントが「ユーザ名」だけになり、ローカルユーザでSSHログインを試みてしまうわけです。

    ¥のところをバックスラッシュにしたり、続けて複数回書いたり、ログイン名をクォーテーションで囲んだり、、といろいろ試行錯誤するもダメ!

    で、結論として、ドメイン名をユーザ名の前の書くのではなく、

    • ユーザー名@ドメイン名

    のように、ユーザ名の後に@で続けて書くのが正解です。でもこんなことしちゃうと、ログインアクセスが、

    • ユーザ名@ドメイン名@サーバー名

    みたいに@が2つになってしまい、大丈夫なのかと思いますが、どうやらOKなようです。



    2023-06-04

    Windows11でSSHサーバーを立ち上げる方法

    Windows11でSSHサーバを立ち上げる方法は、思いのほか簡単です。

    1. 【設定】→【アプリ】→【オプション機能】→【機能を表示】へ移動
    2. OpenSSHサーバーにチェックを入れ、【次へ】→【インストール】

    以上です。なお、sshはポート22番を使います。上記の作業を行ったにも関わらずアクセスできない場合は、ファイヤーウォール(Windows Deffender)が悪さをしてます。22番ポート開けるようにWindows Deffenderの設定しましょう。





    2023-06-02

    Kinect: PykinectAzureで骨格情報を取得する

     近年の画像AI技術が発展により、Kinectとかあまり注目されなくなりましたが、おちラボではデプスカメラとしての性能の良さなどに魅力を感じていることから、懲りずに使ってます。

    といっても久しぶりな面もあり、最近流行りのPythonでも利用できることから、数あるライブラリの中で、

    というのが使いやすそうです。で、sampleがいくつかあるのですが、骨格情報を取得するsampleがなぜか見当たらなかったので、以下に掲載します。まあ確かにC#やるよりはラクですね。OpenCVに対応するために画像変換もさほど気にしなくて良さそうですし。。

    import numpy as np
    import cv2
    import pykinect_azure as pykinect
    if __name__ == “__main__“:
    # Initialize the library, if the library is not found, add the library path as argument
    pykinect.initialize_libraries(track_body=True)
    # Modify camera configuration
    device_config = pykinect.default_configuration
    device_config.color_resolution = pykinect.K4A_COLOR_RESOLUTION_OFF
    device_config.depth_mode = pykinect.K4A_DEPTH_MODE_WFOV_2X2BINNED
    #print(device_config)
    # Start device
    device = pykinect.start_device(config=device_config)
    # Start body tracker
    bodyTracker = pykinect.start_body_tracker()
    cv2.namedWindow(‘Depth image with skeleton’,cv2.WINDOW_NORMAL)
    while True:
    # Get capture
    capture = device.update()
    # Get body tracker frame
    body_frame = bodyTracker.update()
    # Get the color depth image from the capture
    ret_depth, depth_color_image = capture.get_colored_depth_image()
    # Get the colored body segmentation
    ret_color, body_image_color = body_frame.get_segmentation_image()
    if not ret_depth or not ret_color:
    continue
    # Combine both images
    combined_image = cv2.addWeighted(depth_color_image, 0.6, body_image_color, 0.4, 0)
    # Draw the skeletons
    combined_image = body_frame.draw_bodies(combined_image)
    # Get body information
    bodies = body_frame.get_bodies()
    # Get body information
    bodies = body_frame.get_bodies()
    # Access joint positions
    for body in bodies:
    for joint in body.joints:
    nose_joint = body.joints[pykinect.K4ABT_JOINT_NOSE]
    position = joint.position
    # Use position.x, position.y, position.z to access the x, y, z coordinates of the joint
    print(“nose positionだよ“, position.x,position.y)
    # Overlay body segmentation on depth image
    cv2.imshow(‘Depth image with skeleton’,combined_image)
    # Press q key to stop
    if cv2.waitKey(1) == ord(‘q’):
    break
    view raw getJointData.py hosted with ❤ by GitHub