As the Internet becomes integrated into almost every aspect of people's lives, the amount of content users provide is growing at an exponential rate. It is common for web providers to operate databases with petabytes of data, while leading content providers are already looking toward technology to handle exabyte implementations. One social networking website, for example, has attracted over a billion users who have posted over 250 billion photos, with another 350 million photos being posted each day.
Many of these images are viewable by users other than the image posters, such as the posters friends, members of affiliated groups, or the general public. Some of these images may contain content that some users may find objectionable, such as sexual content, violent scenes, drug use, etc. However, due to the sheer volume of images, it is infeasible for each image to have human review prior to being available to other users. Furthermore, what is considered “objectionable” can vary, such as by location or user age. Thus, images can require multiple levels of classifications such as “objectionable to users under age 18,” “objectionable to users who have been identified as not wanting to see violent images,” or “objectionable to users who are associated with religion X.”
Several computational approaches have been attempted to identify images as containing objectionable content. For example, neural networks have been used to analyze images and classify them as containing sexual content or not. As another example, object recognition techniques have been applied to identify objects in images that may be found objectionable. However, these methods of identifying objectionable content are prone to accuracy errors.
The techniques introduced herein may be better understood by referring to the following Detailed Description in conjunction with the accompanying drawings, in which like reference numerals indicate identical or functionally similar elements.
Creating and applying arbitrated image classifiers is disclosed. An arbitrated image classifier system can be trained to identify whether an image contains specified features, such as sexual, violent, other potentially objectionable content, or other image features. An arbitrated image classifier can include a configuration of multiple classifiers and an arbitrator that determines a final image classification based on classification results from the multiple classifiers. An arbitrated image classifier can be trained to identify image features by dividing into portions images labeled as including or not including a specified feature. Each image portion can be matched to a classifier (e.g., a deep neural network), where the matching can be based on the region of the image that image portion came from. Each classifier can generate a result, and the results can be provided to an arbitrator, which provides a final classification for whether or not the image includes the specified feature. If the final classification does not match the label of the image, parameters or weight values for various of the multiple classifiers or the arbitrator can be adjusted. Once the arbitrated image classifier is trained for a particular feature, images without a known label can be split into image portions which can be provided to the trained arbitrated image classifier to determine whether the image includes the particular feature.
By first dividing an image into portions, classifying each portion individually, and then reaching a final determination based on a combination of the classifications, a greater level of accuracy for identifying particular features can be achieved. This is particularly true for images where the feature for which the arbitrated image classifier is trained is often in the image background or otherwise not prominently displayed in the image.
As an example, the arbitrated image classifier system can include ten deep neural networks, each corresponding to a general zone across images. A series of images can be labeled as either containing sexual content or not. The arbitrated image classifier system can then divide each image into ten image portions using an algorithm that can, for example, be based on an analysis of where sexual content is likely to be within images. For each image, the arbitrated image classifier system can then match each of the ten image portions to one of the ten deep neural networks based on that image portion originating from an area of the image corresponding to the zone assigned to the matched deep neural network. Each deep neural network can then be used to classify its matched image portion as having sexual content or not. These results can then be provided to an arbitrator. In this example, the arbitrator uses a weighted average of the classifier results to determine a final image classification value. This value is then used to adjust the parameters for the deep neural networks as well as the weights for their results. As the series of images is processed, the arbitrated image classifier system improves its ability to correctly classify whether images have sexual content.
As used herein, a “patch” is an image portion that can be supplied to a classifier. In some implementations, a patch can be a defined region of an image. However, as discussed below in relation to
Several implementations of the described technology are discussed below in more detail in reference to the figures. Turning now to the figures,
CPU 110 can be a single processing unit or multiple processing units in a device or distributed across multiple devices. CPU 110 can be coupled to other hardware devices, for example, with the use of a bus, such as a PCI bus or SCSI bus. The CPU 110 can communicate with a hardware controller for devices, such as for a display 130. Display 130 can be used to display text and graphics. In some examples, display 130 provides graphical and textual visual feedback to a user. In some implementations, display 130 includes the input device as part of the display, such as when the input device is a touchscreen or is equipped with an eye direction monitoring system. In some implementations, the display is separate from the input device. Examples of display devices are: an LCD display screen, an LED display screen, a projected display (such as a heads-up display device or a head-mounted device), and so on. Other I/O devices 140 can also be coupled to the processor, such as a network card, video card, audio card, USB, firewire or other external device, camera, printer, speakers, CD-ROM drive, DVD drive, disk drive, or Blu-Ray device.
In some implementations, the device 100 also includes a communication device capable of communicating wirelessly or wire-based with a network node. The communication device can communicate with another device or a server through a network using, for example, TCP/IP protocols. Device 100 can utilize the communication device to distribute operations across multiple network devices.
The CPU 110 has access to a memory 150. A memory includes one or more of various hardware devices for volatile and non-volatile storage, and can include both read-only and writable memory. For example, a memory can comprise random access memory (RAM), CPU registers, read-only memory (ROM), and writable non-volatile memory, such as flash memory, hard drives, floppy disks, CDs, DVDs, magnetic storage devices, tape drives, device buffers, and so forth. A memory is not a propagating signal divorced from underlying hardware; a memory is thus non-transitory. Memory 150 includes program memory 160 that stores programs and software, such as an operating system 162, arbitrated image classifier 164, and any other application programs 166. Memory 150 also includes data memory 170 that can include patching algorithms and templates, labeled images, neural network or other classifier constructors, objectionable content classifications, configuration data, settings, and user options or preferences which can be provided to the program memory 160 or any element of the device 100.
The disclosed technology is operational with numerous other general purpose or special purpose computing system environments or configurations. Examples of well-known computing systems, environments, and/or configurations that may be suitable for use with the technology include, but are not limited to, personal computers, server computers, handheld or laptop devices, cellular telephones, wearable electronics, tablet devices, multiprocessor systems, microprocessor-based systems, set-top boxes, programmable consumer electronics, network PCs, minicomputers, mainframe computers, distributed computing environments that include any of the above systems or devices, and the like.
In some implementations, server 210 can be an edge server which receives client requests and coordinates fulfillment of those requests through other servers, such as servers 220A-C. Server computing devices 210 and 220 can comprise computing systems, such as device 100. Though each server computing device 210 and 220 is displayed logically as a single server, server computing devices can each be a distributed computing environment encompassing multiple computing devices located at the same or at geographically disparate physical locations. In some implementations, each server 220 corresponds to a group of servers.
Client computing devices 205 and server computing devices 210 and 220 can each act as a server or client to other server/client devices. Server 210 can connect to a database 215. Servers 220A-C can each connect to a corresponding database 225A-C. As discussed above, each server 220 may correspond to a group of servers, and each of these servers can share a database or can have their own database. Databases 215 and 225 can warehouse (e.g. store) information such as classified or unclassified images, content classification labels, and identified user characteristics. Though databases 215 and 225 are displayed logically as single units, databases 215 and 225 can each be a distributed computing environment encompassing multiple computing devices, can be located within their corresponding server, or can be located at the same or at geographically disparate physical locations.
Network 230 can be a local area network (LAN) or a wide area network (WAN), but can also be other wired or wireless networks. Network 230 may be the Internet or some other public or private network. The client computing devices 205 can be connected to network 230 through a network interface, such as by wired or wireless communication. While the connections between server 210 and servers 220 are shown as separate connections, these connections can be any kind of local, wide area, wired, or wireless network, including network 230 or a separate public or private network.
General software 320 can include various applications including an operating system 322, local programs 324, and a BIOS 326. Specialized components 340 can be subcomponents of a general software application 320, such as a local program 324. Specialized components 340 can include image patching module 344, patch-to-classifier matching module 346, arbitrated image classifier 348, arbitrated image classifier update module 350, and components which can be used for controlling and receiving data from the specialized components, such as interface 342.
Image patching module 344 can receive, through interface 342, an image. Images can be sourced from a variety of origins such as posts to a social media or other website, an established image collection, news or magazine articles, company promotional material, a direct feed from an image capture device, security or other monitoring devices, etc. Images can also come from a variety of formats such as still images, frames from video, composites, drawings, animation, etc. Images can be in a variety of types, sizes, and encodings. The image patching module 344 can apply a patching algorithm to the received image to create a number of patches. In some implementations, the number of patches created can correspond to the number of classifiers in arbitrated image classifier 348. In various implementations, the patching algorithm can select random or semi-random areas, apply an established patching template, or base patch creation on identified objects or edges. In some implementations, the way an image is divided into patches can depend on characteristics of the image such as its source, size, type, whether it contains identified objects, etc. In some implementations, patches can be of different types. For example, a received image can be divided into ten patches based on an established patch template, four additional patches can be created based on recognized objects in the image, and three additional patches can be created for the red, green and blue hues in the image. In some implementations, the created patches can include overlapping information. In implementations where an arbitrated image classifier is being trained, the received image can already be associated with a label indicating whether or not it has the feature for which the arbitrated image classifier is being trained. Dividing an image into patches is further described below in relation to block 408 of
Patch-to-classifier matching module 346 can receive the patches from image patching module 344 and determine which of the classifiers of the arbitrated image classifier 348 will evaluate each of the patches. Patch-to-classifier matching can be based on each classifier of arbitrated image classifier 348 corresponding to a particular image characteristic such as: a zone of images, a color or hue of images, type of object appearing in images, etc. Continuing the previous example, each of the 17 created patches can be matched to a classifier, the first ten patches matched to classifiers corresponding to ten image zones, the next four patches matched to classifiers corresponding to the type of objects identified, and the final three patches matched to classifiers corresponding to the red, green, and blue hues. In some implementations, image patching module 344 can create more or fewer patches than there are classifiers in arbitrated image classifier 348. In various implementations, not every classifier will be matched with a patch, some classifiers may evaluate more than one patch, or some patches can be split or combined to assign a patch to every classifier. Matching patches to arbitrated image classifier classifiers is further described below in relation to block 410 of
Arbitrated image classifier 348 can include a configuration of multiple classifiers and an arbitrator. The classifiers in arbitrated image classifier 348 can be neural networks, deep neural networks, support vector machines, decision trees, Parzen windows, Bayes, or other types of classifiers. In various implementations, the classifiers in arbitrated image classifier 348 can all be of the same type or can be combinations of types. Arbitrated image classifier 348 can receive the patches from patch-to-classifier matching module 346 and apply the matched classifiers of the arbitrated image classifier 348 to their matched patch. Each applied classifier can return a result indicating whether the patch matched to that classifier indicates, at least in part, whether the image includes the particular feature(s) for which the arbitrated image classifier is searching. In various implementations, the classifier results can be a binary value, a binary value coupled with a confidence factor, a strength value indicating how strongly the patch indicates whether the image includes the particular feature(s), or a set of features indicated by the patch.
The arbitrator in arbitrated image classifier 348 can be configured to determine whether the received image includes the particular image feature based on one or more of the classification results from the classifiers of arbitrated image classifier 348. The arbitrator can make the feature determination by selecting one of the results or by performing a combination of two or more of the classification results. For example, the arbitrator can use a weighted combination of the classification results. In various implementations, the weighting factors can be the result of previous training of the arbitrated image classifier 348 or specified weights, such as based on a historical analysis of images indicating which portions of images are most likely to be indicative of the particular feature. As another example, the arbitrator can have a default, such as the image not having the defined feature, and only returning the opposite result (i.e. the image having the defined feature) if a threshold amount of classifiers return that opposite result. The threshold amount of classifiers can be, for example, 1, 33%, 50%, 75%, or 100%. As further examples, the arbitrator can: select the classification result with the highest confidence factor; average classification results, which may use confidence factors or strength values as average weights; combine classification results based on the type of patches analyzed by the classifiers, such as classifiers analyzing a patch created for an identified object can be given greater weight than a classifier analyzing a particular hue; or include a hierarchy of two or more levels for the classifiers, such as having identified a primary set of classifiers and only taking into account a set of results from secondary classifiers if the higher level classification is inconclusive (e.g. doesn't have a combined confidence factor above a specified threshold), which can be applied iteratively with further classifier levels. In some implementations, the particular feature the arbitrated image classifier 348 is searching for is objectionable content, such as sexual content, violent scenes, drug use, etc. Arbitrated image classifiers and applying an arbitrated image classifier are further described below in relation to blocks 404, 412, and 414 of
When the image received by interface 342 is a training image associated with a label for the feature the arbitrated image classifier 348 is being trained to recognize, and when a result determined by the arbitrator of arbitrated image classifier 348 does not sufficiently match the associate label, arbitrated image classifier update module 350 can adjust parameters of the classifiers or arbitrator. This adjustment can be performed multiple times, re-evaluating the training image after each adjustment, until the arbitrated image classifier 348 sufficiently characterizes the image as having or not having the defined feature. Arbitrated image classifier update module 350 can adjust the weights of individual nodes of the classifiers of arbitrated image classifier 348 or arbitrated image classifier update module 350 can adjust weights used by the arbitrator of arbitrated image classifier 348 for the various classifiers. In some implementations, arbitrated image classifier update module 350 can make the same adjustment to each of the classifiers of arbitrated image classifier 348. In some implementations, arbitrated image classifier update module 350 can adjust how the image patching module 344 creates image patches or how patch-to-classifier matching module 346 matches patches to classifiers. Updating a classifier and arbitrator parameters are further described below in relation to blocks 416 and 418 of
Those skilled in the art will appreciate that the components illustrated in
At block 406, process 400 can receive an image with an associated label. In some implementations, the received image can come from transmission from a user device to a social media website server. In various implementations, the image can be from various sources such as a photo, a hand-made or computer generated drawing, a video, an animation, etc. The label associated with the image can indicate whether or not the image includes a feature which an arbitrated image classifier is to be trained to find. For example, the label can be whether or not the image contains objectionable content. Objectionable content, for example, can include sexual content, violent scenes, drug use, etc. Other examples of image features include whether images are appropriate or of interest for a particular audience (e.g. based on audience age, location, friend group, gender, content consumption history, etc.) or whether the image includes particular objects, particular logos or other brand information, particular faces, particular locations, security concerns, etc.
At block 408, the received image can be split into a set of patches. As discussed above, a patch of an image can be any data representing some subset of the image. In various implementations, patches can be areas of the image, objects identified in the image, non-consecutive potions of the image, the image or portions of the image with various transformations applied, etc. Image patching can be accomplished by applying various algorithms such as an algorithm that takes random image areas; an algorithm that takes semi-random image areas assuring the image areas are of a particular shape, size, or have connected pixels; an algorithm that divides an image based on edge analysis; or an algorithm that applies an established patch template. An algorithm that applies an established patch template can take image areas according to a grid, can iteratively take image portions until the entire image is divided into patches, or can otherwise deterministically divide an image into patches. In some implementations, the number of patches the image is divided into can correspond to the number of classifiers in the arbitrated image classifier received at block 404.
At block 410, the patches created at block 408 can be matched to one or more of the classifiers in the arbitrated image classifier received at block 404. In some implementations, the patches can be matched to classifiers based on a correspondence between factors used to create each patch and an assignment for each classifier to analyze those factors. For example, the patches can be matched to classifiers based on a correspondence between an image area the patch was taken from and an image zone assigned to each classifier. In some implementations, not all the classifiers may be matched to a patch when the number of patches created at block 408 is less than the number of classifiers in the arbitrated image classifier received at block 404. In some implementations, patches may be combined or multiple patches may be assigned to a single classifier when the number of patches created at block 408 is greater than the number classifiers in the arbitrated image classifier received at block 404.
At block 412, each classifier, of the arbitrated image classifier, that is matched to a patch at block 410 can be applied to the corresponding matched patch. Applying each classifier can depend on the type of classifiers in the received arbitrated image classifier. For example, where the classifiers are deep neural networks, the patch can be converted into a series of signals to input into a first row of nodes. The first row can then provide weighted signals to a subsequent row of nodes. These signals can be in various forms extracted from the image such as a column matrix, a feature vector, etc. This weighted input and output process can be repeated for as many rows are included in the deep neural network until an output row provides a result.
At block 414, the results of each classifier are provided to an arbitrator of the arbitrated image classifier. The arbitrator can use the classifier results to provide a determination of whether or not the received image includes the feature for which the arbitrated image classifier is being trained. In some implementations, the arbitrator can make this determination by combining results based on weights assigned to each classification result based on previous iterations of training. For example, each classifier in the arbitrated image classifier can initially be given a default or random weight. As image patches are presented to the classifiers, the arbitrator can combine the classification results using the assigned weight. As discussed below in relation to blocks 416 and 418, when the results of the combination are not sufficiently correct, the weights can be adjusted such that future iterations are more likely to provide correct results. Alternatively or in addition, the arbitrator can use a trained threshold value to specify a binary result of whether or not the image includes a particular feature. For example, the combination of the classification results, which may or may not account for individual result weights, can be computed as a score. For example, a score could indicate that the image is 67% likely to contain objectionable content. A previous trained threshold value can specify that a score of 73% is required to classify an image as containing objectionable content. Thus, the image will not be classified as having objectionable content. However, in this example, the label for that image specifies that it does contain objectionable content, so the required threshold value can be lowered. In some implementations, the classification weights or the threshold value can be manually selected.
In some implementations, the arbitrator can be programmed with an alternate algorithm to determine whether the received image includes the specified feature, such as requiring unanimous classification results to override a default. For example, a default can be that an image includes objectionable content, and only if all classification results indicate that no objectionable content was found in the corresponding patch will the result be changed to classify the image as not having objectionable content.
In some implementations, the arbitrator can compute a confidence factor to include with, or as, a result. For example, a resulting weighted average of the classification results can be placed on a continuum to provide a measure of how far that combined result is from the center of the continuum. As another example, where a threshold value is required for making the binary determination of whether the image includes a particular feature, how far above or below the threshold a final score is can be used as a confidence factor.
At block 416, the image classification found by the arbitrator in block 414 is compared to the label associated with the image received at block 406. If the classification matches the label, process 400 continues to block 420. If the classification does not match the label, process 400 continues to block 418. In some implementations, matching can take into account a required threshold level of accuracy. For example, a result from the arbitrator can be a score or can be associated with a confidence value. Even if the overall result from the arbitrator is the same as the associated image label, process 400 can determine that the result does not sufficiently match the associated image label if the score or confidence factor is not above a threshold level.
At block 418, updates are made to parameters of the classifiers or arbitrator. These updates can include changing classification parameters for individual classifiers, changing weights used for combining classifier results, changing a threshold value used to determine whether a final score indicates that the received image does or does not include the feature for which the arbitrated image classifier is being trained, or parameters used to determine a confidence value. Where at least some of the classifiers are a type of neural network, the updating can include adjusting weights assigned to various nodes within the neural network. Where at least some of the classifiers are a type of support vector machine, the updating can include adjusting a hyperplane. In some implementations, the same change is made to each of the classifiers in the arbitrated image classifier that are of the same type. Adjusting parameters of the arbitrator can include adjusting the weight given to each classifier result.
In some implementations, the changes made by process 400 at block 418 can also include modifications to how an image is divided into patches at block 408, such as by changing the regions indicated by an established patching template. In some implementations, the changes made by process 400 at block 418 can also include modifications to how patches are matched to classifiers at block 410, such as by changing an image zone assigned to a classifier or by adjusting the category of identified objects found in patches that correspond to a classifier. In some implementations, the amount of adjustment made can correspond to how close an arbitrator-generated score is to correctly identifying the feature for which the arbitrated image classifier is being trained. For example, if the arbitrator provides a score of 36/100 that an image has objectionable content, where the image is associated with an objectionable content label, a large update to classifier or arbitrator parameters can occur, whereas if the score was 89/100, a correspondingly smaller update can occur.
At block 420, the arbitrated image classifier configuration, with any updates made at block 418, can be returned. This arbitrated image classifier can then be further trained by applying additional pre-labeled images using process 400, can be further trained by re-applying images until the classification is sufficiently correct or to ensure that an adjustment made from training another image did not result in detrimental results for inspecting other images, or can be used by another process, such as process 500 described below, for analyzing new images that have not been pre-labeled to indicate whether or not they contain the features for which the arbitrated image classifier is trained. Process 400 then continues to block 422, where it ends.
At block 508, process 500 can divide the received image into a set of patches. This can be done using the same patch dividing process used in training the received arbitrated image classifier at block 408 of process 400. At block 510, process 500 can match the patches created in block 508 to the classifiers of the arbitrated image classifier received at block 504. This can be done using the same matching process used in training the received arbitrated image classifier at block 410 of process 400. At block 512, process 500 can apply the classifiers in the received arbitrated image classifier to compute classification results, which at block 514 can be provided to the arbitrator of the received arbitrated image classifier to obtain an image classification of whether or not the received image includes the feature for which the received arbitrated image classifier was trained. This result can, in various implementations, be a binary value or a score, and may or may not be associated with a confidence factor. This application of the classifiers and arbitrator of the arbitrated image classifier can be done using the same process used in training the received arbitrated image classifier at block 412 and 414 of process 400. In some implementations, a arbitrator result can be indeterminate, indicating that the classification process did not provide a definite result, did not provide a score above or below a threshold level, or was not associated with a sufficiently high confidence factor.
At block 516, the image classification found in block 514 can be returned. This image classification can be used, for example, to prevent images from being shown or included in a social media system, to identify images that contain proprietary images such as trademarks, to restrict audiences that can view images such as by age or location, etc. If the image classification is indeterminate, the image can be flagged for further analysis such as for applying additional computational classification or for human review. Once an image classification is returned, process 500 continues to block 518, where it ends.
Example 600 begins by dividing image 602 into a set of patches 604, enumerated in example 600 as patches P1-P10. In this example, an established patching template is applied to image 602 to create patches 604. The established patching template can be automatically scaled to fit the size of the image 602 or can define patches in terms of percentages. For example, patch P1 can be defined in the established patching template as the area including the topmost 33% of the image by the leftmost 20% of the image and patch P2 can be defined in the established patching template as the area including the 40% of the image to the right of patch P1 and the topmost 25% of the image, etc. In example 600, applying the established patching template is configured to produce ten patches, one corresponding to each of the classifiers 616.
Next, in example 600, each of the patches 604 are matched to one of the classifiers 616 of the arbitrated image classifier. In example 600, each classifier is configured to analyze an image zone corresponding to one of the patching areas defined by the established patching template. Thus, for example, patch P1 will be provided to classifier C1, patch P5 will be provided to classifier C5, etc.
Each of the patches 604 is then analyzed by its corresponding classifier from classifiers 616. An example of applying a classifier to a patch is shown at 606 for classifier C1 and patch P1. At 606, patch P1 is converted into one or more input signals which are provided to nodes at input layer 608. Each node in classifier C1 is a representation of a function that transforms a received input signal into an output signal. Classifier C1 can be structured such that each node at each layer, starting with the input layer 608, is connected (i.e. provides an output signal) to each node in the next layer of the one or more hidden layers 610. The nodes in the final hidden layer 610 then provide their output signals to an output node 612, whose output signal 614 is the output for classifier C1. Each node in classifier C1 can have a weighing factor for each signal it receives. Thereby, as adjustments to weighing factors are performed when training classifier C1, various outputs 614 can be achieved for a given input patch.
When the classifiers 616 have computed a classification result for each corresponding patch 604, the results are provided through connections 618 to arbitrator 620. Each of the connections 618 can have a trained weight which can be used by arbitrator 620 to compute a classification 622 for image 602. In implementations where the arbitrated image classifier is being trained, classification 622 is compared to classification 605, and if they do not match, at 624, updates are performed by changing parameters defining weights between the nodes of classifiers 616 or by changing parameters controlling the weights of connections 618. In example 600, when a change to classifier parameters is made, the same change is made to each of the classifiers 616. In implementations where a image label is not previously known, the output 622 can be provided at 626 as the indication of whether or not the image includes the feature(s) for which the arbitrated image classifier was trained.
Several implementations of the disclosed technology are described above in reference to the figures. The computing devices on which the described technology may be implemented may include one or more central processing units, memory, input devices (e.g., keyboard and pointing devices), output devices (e.g., display devices), storage devices (e.g., disk drives), and network devices (e.g., network interfaces). The memory and storage devices are computer-readable storage media that can store instructions that implement at least portions of the described technology. In addition, the data structures and message structures can be stored or transmitted via a data transmission medium, such as a signal on a communications link. Various communications links may be used, such as the Internet, a local area network, a wide area network, or a point-to-point dial-up connection. Thus, computer-readable media can comprise computer-readable storage media (e.g., “non-transitory” media) and computer-readable transmission media.
As used herein, being above a threshold means that a value for an item under comparison is above a specified other value, that an item under comparison is among a certain specified number of items with the largest value, or that an item under comparison has a value within a specified top percentage value. As used herein, being below a threshold means that a value for an item under comparison is below a specified other value, that an item under comparison is among a certain specified number of items with the smallest value, or that an item under comparison has a value within a specified bottom percentage value. As used herein, being within a threshold means that a value for an item under comparison is between two specified other values, that an item under comparison is among a middle specified number of items, or that an item under comparison has a value within a middle specified percentage range.
As used herein, the word “or” refers to any possible permutation of a set of items (i.e. “A, B, or C” means at least one of: A, B, C, or any combination thereof). For example, the phrase “A, B, or C” refers to any of A; B; C; A and B; A and C; B and C; A, B, and C; or multiple of any item such as A and A; B, B, and C; or A, A, B, C, and C.
Although the subject matter has been described in language specific to structural features and/or methodological acts, it is to be understood that the subject matter defined in the appended claims is not necessarily limited to the specific features or acts described above. Specific embodiments and implementations have been described herein for purposes of illustration, but various modifications can be made without deviating from the scope of the embodiments and implementations. The specific features and acts described above are disclosed as example forms of implementing the claims that follow. Accordingly, the embodiments and implementations are not limited except as by the appended claims.
Any patents, patent applications, and other references noted above, are incorporated herein by reference. Aspects can be modified, if necessary, to employ the systems, functions, and concepts of the various references described above to provide yet further implementations. If statements or subject matter in a document incorporated by reference conflicts with statements or subject matter of this application, then this application shall control.
This application is a continuation of U.S. Nonprovisional patent application Ser. No. 14/695,691, entitled “OBJECTIONABLE CONTENT DETECTOR,” filed Apr. 24, 2015 which is incorporated by reference herein in its entirety.
Number | Date | Country | |
---|---|---|---|
Parent | 14695691 | Apr 2015 | US |
Child | 15353102 | US |