1. ホーム
  2. Web制作
  3. html5

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を応援よろしくお願いします!