html5呼び出しカメラサンプルコード
2022-01-21 17:03:26
最近、HTML5プロジェクトを行う上での勉強で、html5通話カメラの写真記事をブログで読んだが、それぞれ欠点がある。そこで、デモを書くための本をチェックし、主に3つのステップで、さらにコード上で説明することなく。
HTMLコードの部分です。
python santiago_select_grasp.py
[ERROR] [1546838582.884550]: bad callback: <function cloudCallback at 0x7f08de6d4938>
Traceback (letzter Aufruf):
Datei "/opt/ros/kinetic/lib/python2.7/dist-packages/rospy/topics.py", Zeile 750, in _invoke_callback
cb(msg)
Datei "santiago_select_grasp.py", Zeile 14, in cloudCallback
cloud.append([p[0], p[1], p[2]])
AttributeError: Das Objekt 'numpy.ndarray' hat kein Attribut 'append'
Traceback (letzter Aufruf):
Datei "santiago_select_grasp.py", Zeile 40, in <module>
C, _, _, _ = lstsq(A, X[:,2])
Datei "/usr/lib/python2.7/dist-packages/scipy/linalg/basic.py", Zeile 1154, in lstsq
a1 = _asarray_validated(a, check_finite=check_finite)
Datei "/usr/lib/python2.7/dist-packages/scipy/_lib/_util.py", Zeile 238, in _asarray_validated
a = toarray(a)
Datei "/home/pumpkinking/anaconda2/lib/python2.7/site-packages/numpy/lib/function_base.py", Zeile 461, in asarray_chkfinite
"array darf keine infs oder NaNs enthalten")
ValueError: array darf keine infs oder NaNs enthalten
次にjsのコードの部分です。
import rospy
von sensor_msgs.msg importieren Punktwolke2
from sensor_msgs import point_cloud2
import numpy as np
cloud = [] # globale Variable zum Speichern der Punktwolke
def cloudCallback(msg):
global cloud
if len(cloud) == 0:
for p in point_cloud2.read_points(msg):
cloud.append([p[0], p[1], p[2]])
# Einen ROS-Knoten erstellen.
rospy.init_node('select_grasp')
# Abonnieren Sie das ROS-Thema, das die Griffe enthält.
cloud_sub = rospy.Subscriber('/camera/depth/points', PointCloud2, cloudCallback)
# Warten Sie auf die Ankunft der Punktwolke.
while len(wolke) == 0:
rospy.sleep(0.01)
# Extrahiere die nicht-planaren Indizes. Verwendet eine Anpassung nach der Methode der kleinsten Quadrate AX = b. Gleichung für die Ebene: z = ax + by + c.
import numpy as np
from scipy.linalg import lstsq
wolke = np.asarray(wolke)
wolke=np.nan_to_num(wolke)
X = Wolke
A = np.c_[X[:,0], X[:,1], np.ones(X.shape[0])]
C, _, _, _ = lstsq(A, X[:,2])
a, b, c, d = C[0], C[1], -1., C[2] # Koeffizienten der Form: a*x + b*y + c*z + d = 0.
dist = ((a*X[:,0] + b*X[:,1] + d) - X[:,2])**2
err = dist.sum()
idx = np.where(dist > 0.01)
# Veröffentlichen Sie die Punktwolke und die nicht-planaren Indizes.
from gpd.msg import CloudIndexed
from std_msgs.msg import Header, Int64
from geometry_msgs.msg import Punkt
pub = rospy.Publisher('cloud_indexed', CloudIndexed, queue_size=1)
msg = CloudIndexed()
header = Kopfzeile()
header.frame_id = "/camera_link"
header.stamp = rospy.Time.now()
msg.cloud_sources.cloud = point_cloud2.create_cloud_xyz32(header, cloud.tolist())
msg.cloud_sources.view_points.append(Punkt(0,0,0))
for i in xrange(cloud.shape[0]):
msg.cloud_sources.camera_source.append(Int64(0))
for i in idx[0]:
msg.indices.append(Int64(i))
#s = raw_input('Drücken Sie [ENTER] zum Veröffentlichen')
pub.publish(msg)
rospy.sleep(2)
print 'Wolke veröffentlicht mit', len(msg.indices), 'indices'
# Wählen Sie einen Griff aus, den der Roboter ausführen soll.
from gpd.msg import GraspConfigList
grasps = [] # globale Variable zum Speichern von Griffen
def callback(msg):
global grasps
grasps = msg.grasps
# Abonnieren Sie das ROS-Topic, das die Griffe enthält.
grasps_sub = rospy.Subscriber('/detect_grasps/clustered_grasps', GraspConfigList, callback)
# Warten auf das Eintreffen der Gräser.
rate = rospy.Rate(1)
while not rospy.is_shutdown():
if len(grasps) > 0:
rospy.loginfo('Received %d grasps.', len(grasps))
break
grasp = grasps[0] # grasps werden in absteigender Reihenfolge nach Punktzahl sortiert
print(grasp)
print 'Ausgewählter Griff mit Punktzahl:', grasp.score
注目すべき点
ウェブカメラを使うときは、サーバーで開かないと使えない!?これは、ウェブカメラがネットワークの一部であるため、サーバー上で開く必要があるためです。
{今のところ、Chromeとopera、そしてほとんどのモバイル端末がHTLM5に対応しているようで、Chromeでテストしたところ、無事にカメラを開くことができました。
もうひとつ、うまくいかない場合は、Chromeでカメラを開く許可を誤ってオフにしている可能性があるので、再度有効にしてください
/p今回はhtml5通話カメラの例について紹介しましたが、もっと関連するhtml5通話カメラのコンテンツはBinaryDevelopの過去記事を検索するか、以下の関連記事を引き続き閲覧してください、今後ともBinaryDevelopを応援よろしくお願いします!
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Canvasでイベントを追加する方法を説明する
-
HTML5入門(II)
-
amazeuiのツリーノード自動展開パネルの実装と、最初のツリーノードの選択
-
AmazeUIがモーダルボックスにフォームを埋め込んでモーダルインプットボックスを形成する
-
高解像度画面でのキャンバスブラーの問題を記憶する
-
Webフォント読み込み方式最適化のまとめ
-
iframe+postMessageを使ったクロスドメインコミュニケーションのサンプルコード
-
HTML5新フォームコントロールとフォームプロパティのサンプルコード詳細
-
HTML5タイマーrequestAnimationFrameの使い方を深く理解する。
-
ページ下部のHTML5フッターの詳細(CSS+JS)